2009-08-08 7 views
2

私は写真選択機能(UIImagePickerController)を表示するアプリケーションを持っていますが、ユーザが一度触れるだけで機能します。そして私は、私は問題の根本を知っていると思うが、私はそれを解決する方法がわからない...私は、モーダルダイアログを表示する前に、次のようにタッチ時のスタックは、次のとおりです。モーダルビューコントローラUIImagePickerControllerを表示して終了した後、私のCocos2d iPhoneアプリケーションに複数のタッチが表示されなくなった

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

しかし示すと後ここで

 
... 
#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つの神秘的なforwardMethod2呼び出したモーダルダイアログを取り除きます) 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???? 
} 

私はピッカービューをクリーンアップに欠けている何かがあるに違いありません...ヘルプは大歓迎です:)

+0

本当にaddSubViewを実行する必要がありますか?私はそれが必要だとは思わないし、それが奇妙な行動を引き起こしているかどうかを調べるために取り除こうとしている。 –

+0

ええ、その部分を取っても、ダイアログは表示されません。 "self"はviewControllerではないので、私のアプリケーションはViewControllerを何も使用しません。私はそれを作成して、ビューを既存のビューに追加する必要があります。 –

答えて

4

後ルートウィンドウからビューの階層を調べてみました。私は、viewitrollerのビューがUITransitionViewの下で子として追加されているので、代わりにviewControllerのビューのスーパービューを削除することがPhoto chooserを却下した後に見つかりました。

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

その問題があって、あなたの解決策がそれを修正しました。年齢のために私の頭を傷つけている。 –

2

私はCJハンソンのソリューションは、iPhoneで私のために動作していることに気付きました:

[pickerViewController.view.superview removeFromSuperview]; 

ではなく、iPadの上。通常の方法:

[pickerViewController.view removeFromSuperview]; 

はiPadで動作します。私は現時点で両方を呼び出すだけでOKです:

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

これがなぜ必要なのかを明らかにすることができますか?

関連する問題