Après avoir affiché et rejeté la vue Modal contrôleur UIImagePickerController mon Cocos2d iPhone app ne voit pas plusieurs touches plus

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

Question

J'ai une application où j'afficher la photo chooser (UIImagePickerController) mais il ne seul après que l'utilisateur rejette touches fonctionnent. Et je pense que je connais la racine du problème, mais je ne sais pas comment le résoudre ... Avant que je montre la boîte de dialogue modale la pile au cours d'une touche est la suivante:

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

Mais après avoir montré, puis retirer la boîte de dialogue modale la pile a ces deux mystérieux appels forwardMethod2:

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

Voici le code que j'utilise pour afficher et supprimer le UIImagePickerController: Remarques:  1. pickerViewController est un membre de cette classe qui étend UIViewController)  2. Directeur est de Cocos2D et ne contient qu'une seule vue fixé directement dans la fenêtre racine appelée openGLView, ce qui est la raison pour laquelle j'ai fait une UIViewController pour loger mon sélecteur d'image.

-(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];
}

Et le code de rejeter la boîte de dialogue:

- (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????
}

Il doit y avoir quelque chose qui me manque dans le nettoyage de la vue ... sélecteur aide est grandement appréciée:)

Était-ce utile?

La solution

Après avoir enquêté sur la hiérarchie de vue depuis la fenêtre racine vers le bas j'ai trouvé que après avoir rejeté la chooser Photo que mon point de vue viewController obtenait ajouté comme un enfant sous un UITransitionView de sorte que la solution est d'enlever la superview de mon avis de viewController place:

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

Autres conseils

J'ai remarqué que la solution de CJ Hanson travaille pour moi sur les iPhones:

[pickerViewController.view.superview removeFromSuperview];

mais pas sur iPads. La façon normale:

[pickerViewController.view removeFromSuperview];

fonctionne sur l'iPad. Je viens d'appeler aussi bien au moment et il semble bien fonctionner:

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

Peut-être quelqu'un avec plus de connaissances peut expliquer pourquoi cela est nécessaire?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top