2009-08-08 2 views
2

Ich habe eine App, wo ich die Fotoauswahl (UIImagePickerController) anzeigen, aber nachdem der Benutzer es nur einzelne Berührungen löst arbeiten. Und ich glaube, ich kenne die Wurzel des Problems, aber ich weiß nicht, wie es zu lösen ... Bevor ich den modalen Dialog zeigen die Stapel während einer Berührung ist wie folgt:Nach dem Anzeigen und Verwerfen des Modal View Controllers UIImagePickerController sieht meine Cocos2d iPhone App nicht mehr mehrere Berührungen

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

Aber nach zeigt und dann entfernen des modalen Dialog hat der Stapel diese zwei mysteriöse forwardMethod2 Anrufe:

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

Hier ist der Code ich verwende den UIImagePickerController anzuzeigen und zu entfernen: Hinweise: 1. pickerViewController ist ein Mitglied dieser Klasse, die UIViewController erstreckt) 2. Director ist von Cocos2D und enthält nur eine Einzelansicht direkt im Root-Fenster namens openGLView angehängt, weshalb ich einen UIViewController für meine Bildauswahl erstellt habe.

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

Und der Code das Dialogfeld zu schließen:

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

Es ist etwas sein muss ich bei der Säuberung der Picker Ansicht bin fehlt ... ist Hilfe sehr geschätzt :)

+0

Sind Sie sicher, dass Sie die addSubView tun müssen? Ich denke nicht, dass das notwendig ist, und ich würde versuchen, es zu entfernen, um zu sehen, ob es das seltsame Verhalten verursacht. –

+0

Ja, diesen Teil herauszunehmen zeigt niemals den Dialog. Da "self" kein viewController ist und meine App ViewController nicht für irgendwas verwendet, muss ich eine hinzufügen und sie zu meiner bestehenden Ansicht hinzufügen. –

Antwort

4

Nach Untersuchung der View-Hierarchie vom Root-Fenster aus Ich habe festgestellt, dass nach dem Schließen des Photo-Choosers, dass die Ansicht meines ViewControllers als untergeordnetes Element unter einem UITransitionView hinzugefügt wurde, die Lösung darin besteht, den Superview der Ansicht meines ViewControllers zu entfernen:

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

Hatte dieses Problem zu und Ihre Lösung hat es behoben. Schon seit Ewigkeiten kratzte ich mich am Kopf. –

2

Ich habe bemerkt, dass CJ Hanson Lösung für mich auf iPhones funktioniert:

[pickerViewController.view.superview removeFromSuperview]; 

aber nicht auf iPads. Der normale Weg:

[pickerViewController.view removeFromSuperview]; 

funktioniert auf dem iPad. Ich nenne nur beide im Moment und es scheint gut zu funktionieren:

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

Vielleicht hat jemand mit mehr Wissen kann klären, warum dies notwendig ist?