2009-08-08 3 views
2

У меня есть приложение, в котором я показываю кнопку выбора фотографий (UIImagePickerController), но после того, как пользователь отклоняет ее, работают только отдельные касания. И я думаю, что я знаю, что корень этой проблемы, но я не знаю, как ее решить ... Перед тем, как показать модальное диалоговое окно стека при прикосновении выглядит следующим образом:После отображения и увольнения контроллера Modal View UIImagePickerController мое приложение для iPhone Cocos2d больше не видит многократных касаний

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

Но после показа и затем удаление модального диалога стопки эти два таинственные forwardMethod2 вызовов:

 
... 
#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???? 
} 

Там должно быть что-то я пропускаю в очистке вид сборщика ... Помощь высоко оценили :)

+0

Вы уверены, что вам нужно сделать addSubView? Я не думаю, что это необходимо, и я попытаюсь удалить его, чтобы увидеть, вызывает ли это странное поведение. –

+0

Да, если принять эту часть, диалог диалога не будет отображаться. Потому что «я» не является viewController, и в противном случае мое приложение не использует ViewControllers для чего-либо, я должен сделать его и добавить его в мой существующий вид. –

ответ

4

После исследовав иерархию представлений из корневого окна вниз, я обнаружил, что после отклонения выбора Photo, которое мое представление viewController было добавлено в качестве дочернего элемента в UITransitionView, поэтому решение состоит в том, чтобы вместо этого отобразить представление моего представления viewController:

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

Если бы эта проблема и ваше решение исправили ее. Я почесывал голову целую вечность. –

2

Я заметил, что решение CJ Хэнсона работает для меня на айфонов:

[pickerViewController.view.superview removeFromSuperview]; 

но не на IPADS. Обычный путь:

[pickerViewController.view removeFromSuperview]; 

работает на iPad. Я просто позвонить как на данный момент, и это, кажется, работает нормально:

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

Может быть, кто-то с большим знанием может пояснить, почему это необходимо?