После отображения и закрытия контроллера модального представления UIImagePickerController мое приложение Cocos2d для iPhone больше не видит несколько касаний.

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

Вопрос

У меня есть приложение, в котором я показываю средство выбора фотографий (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];

Может быть, кто-то более знающий сможет объяснить, зачем это нужно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top