모달 뷰 컨트롤러를 표시하고 해제 한 후 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:]
...

그러나 모달 대화 상자를 표시하고 제거한 후 스택에는이 두 가지 신비한 Forward Method2 호출이 있습니다.

...
#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에서 직접 첨부 된 단일보기 만 포함되어 있습니다. 내 이미지 선택기를 수용하기 위해 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????
}

피커 뷰를 청소할 때 내가 놓친 것이 있어야합니다 ... 도움이 크게 감사합니다 :)

도움이 되었습니까?

해결책

루트 창 아래에서 View Hierarchy를 조사한 후 나는 사진 선택기를 해제 한 후 내 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