После отображения и закрытия контроллера модального представления UIImagePickerController мое приложение Cocos2d для iPhone больше не видит несколько касаний.
-
12-09-2019 - |
Вопрос
У меня есть приложение, в котором я показываю средство выбора фотографий (UIImagePickerController), но после того, как пользователь закрывает его, работают только отдельные касания.Кажется, я знаю корень проблемы, но не знаю, как ее решить...Прежде чем я покажу модальный диалог, стек во время касания выглядит следующим образом:
... #3 0x00074de0 in -[EAGLView touchesBegan:withEvent:] at EAGLView.m:289 #4 0x30910f33 in -[UIWindow _sendTouchesForEvent:] ...
Но после отображения и последующего удаления модального диалога в стеке появляются два загадочных вызова frontMethod2:
... #3 0x00074de0 in -[EAGLView touchesBegan:withEvent:] at EAGLView.m:289 #4 0x3098dc95 in forwardMethod2 #5 0x3098dc95 in forwardMethod2 #6 0x30910f33 in -[UIWindow _sendTouchesForEvent:] ...
Вот код, который я использую для отображения и удаления UIImagePickerController:Примечания:1.PickerviewController является членом этого класса, который расширяет UiviewController) 2.Директор из Cocos2D и содержит только одно представление, прикрепленное непосредственно к корневому окну, под названием openGLView, поэтому я создал UIViewController для размещения моего средства выбора изображений.
-(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];
}
И код закрытия диалога:
- (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????
}
Должно быть, мне чего-то не хватает при очистке окна выбора...Помощь очень ценится :)
Решение
Изучив иерархию представлений от корневого окна вниз, я обнаружил, что после закрытия средства выбора фотографий представление моего viewController добавлялось в качестве дочернего элемента под UITransitionView, поэтому решение состоит в том, чтобы вместо этого удалить суперпредставление моего представления viewController:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePickerController
{
// Dismiss the image selection
[pickerViewController dismissModalViewControllerAnimated:YES];
[pickerViewController.view.superview removeFromSuperview];
}
Другие советы
Я заметил, что решение CJ Hanson работает у меня на iPhone:
[pickerViewController.view.superview removeFromSuperview];
но не на iPad.Обычный способ:
[pickerViewController.view removeFromSuperview];
работает на iPad.Я просто звоню обоим в данный момент, и, кажется, все работает нормально:
[pickerViewController.view removeFromSuperview];
[pickerViewController.view.superview removeFromSuperview];
Может быть, кто-то более знающий сможет объяснить, зачем это нужно?