Depois de exibir e descartar o Modal View Controller UiImagePickerController, meu aplicativo Cocos2d iPhone não vê mais vários toques

StackOverflow https://stackoverflow.com/questions/1247992

Pergunta

Eu tenho um aplicativo em que exibo o Photo Chooser (UiImagePickerController), mas depois que o usuário descarta apenas toques únicos está funcionando. E acho que conheço a raiz da questão, mas não sei como resolvê -la ... antes de mostrar a caixa de diálogo modal a pilha durante um toque é o seguinte:

...
#3  0x00074de0 in -[EAGLView touchesBegan:withEvent:] at EAGLView.m:289
#4  0x30910f33 in -[UIWindow _sendTouchesForEvent:]
...

Mas, depois de mostrar e remover a caixa de diálogo modal, a pilha tem essas duas chamadas misteriosas de ForwardMethod2:

...
#3  0x00074de0 in -[EAGLView touchesBegan:withEvent:] at EAGLView.m:289
#4  0x3098dc95 in forwardMethod2
#5  0x3098dc95 in forwardMethod2
#6  0x30910f33 in -[UIWindow _sendTouchesForEvent:]
...

Aqui está o código que eu uso para exibir e remover o UiImagePickerController: Notes: 1. PickerviewController é um membro desta classe que estende o UIViewController) 2. O Diretor é do Cocos2D e contém apenas uma vista conectada diretamente na janela de raiz chamada OpenGlView, que É por isso que fiz um UiviewController para abrigar meu seletor de imagem.

-(void)choosePhoto: (id)sender{
    UIImagePickerController *imagePickerController = pickerViewController.imagePickerController;
    imagePickerController.delegate = self;
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePickerController.allowsImageEditing = YES;

    UIView *theView = [[Director sharedDirector] openGLView];
    UIView *pickerViewControllerView = pickerViewController.view;
    [theView addSubview:pickerViewControllerView];
    [pickerViewController presentModalViewController:imagePickerController animated:YES];
}

E o código para descartar a caixa de diálogo:

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePickerController
{
    // Dismiss the image selection
    [pickerViewController dismissModalViewControllerAnimated:YES];
    [pickerViewController.view removeFromSuperview];

    // HERE... IS THERE MORE WORK TO BE DONE TO COMPLETELY REMOVE THE PICKER VIEW????
}

Deve haver algo que estou perdendo na limpeza da visualização do catador ... A ajuda é muito apreciada :)

Foi útil?

Solução

Depois de investigar a hierarquia de visualizações a partir da janela da raiz, descobri que, depois de descartar o Chooser de fotos, a visão do meu ViewController estava sendo adicionada quando criança sob uma View Uitransition, para que a solução seja remover a supervisão da visão do meu ViewController:

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePickerController
{
    // Dismiss the image selection
    [pickerViewController dismissModalViewControllerAnimated:YES];
    [pickerViewController.view.superview removeFromSuperview];
}

Outras dicas

Percebi que a solução de CJ Hanson funciona para mim nos iPhones:

[pickerViewController.view.superview removeFromSuperview];

Mas não em iPads. A maneira normal:

[pickerViewController.view removeFromSuperview];

funciona no iPad. Eu apenas ligo para os dois no momento e parece funcionar bem:

[pickerViewController.view removeFromSuperview];
[pickerViewController.view.superview removeFromSuperview];

Talvez alguém com mais conhecimento possa esclarecer por que isso é necessário?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top