Depois de exibir e descartar o Modal View Controller UiImagePickerController, meu aplicativo Cocos2d iPhone não vê mais vários toques
-
12-09-2019 - |
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 :)
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?