После отображения и удаления модального контроллера вида UIImagePickerController мое приложение Cocos2d для iPhone больше не видит несколько касаний - PullRequest
2 голосов
/ 08 августа 2009

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

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

Должно быть что-то, чего мне не хватает при очистке окна выбора ... Помощь очень ценится:)

Ответы [ 2 ]

4 голосов
/ 08 августа 2009

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

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePickerController
{
    // Dismiss the image selection
    [pickerViewController dismissModalViewControllerAnimated:YES];
    [pickerViewController.view.superview removeFromSuperview];
}
2 голосов
/ 23 июня 2012

Я заметил, что решение CJ Hanson работает для меня на iPhone:

[pickerViewController.view.superview removeFromSuperview];

но не на iPad. Нормальный способ:

[pickerViewController.view removeFromSuperview];

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

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

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

...