presentModalViewController를 사용하여 MPMediaPickerController를 표시하려고 할 때 이상한 문제가 있습니다. 나는 잘 작동했지만, 최근에 (아마 3.1에서 MPMediaPickerController가 그 자체를 보여주기를 거부했을 때 마지막으로 작동하는 것을 정확히 기억하지 못한다.) 화면은 검은 색으로 남아 있고 상태 표시 줄은 맨 위에 있으며 응용 프로그램을 강제 종료합니다. Cocos2D 함께 작동하도록 그걸 얻기 위해presentModalViewController가 작동하지 않습니다.
// Show the music picker, allowing the user to create a playlist
- (void) showMusicPicker;
{
[[Director sharedDirector] pause];
[[Director sharedDirector] detach];
musicView = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
[window addSubview:musicView];
musicController = [[UIViewController alloc] init];
[musicController setView:musicView];
[musicController setModalTransitionStyle: UIModalTransitionStyleCoverVertical];
MPMediaPickerController *picker =
[[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];
picker.delegate = self;
picker.allowsPickingMultipleItems = YES;
picker.prompt = @"Select songs to play";
// The media item picker uses the default UI style, so it needs a default-style
// status bar to match it visually
[[UIApplication sharedApplication] setStatusBarHidden:NO animated: YES];
[musicController presentModalViewController: picker animated: YES];
[picker release];
}
당신이 볼 수 있듯이, 그것은 주로 애플의 예에서 그대로 복사 한 것, 몇 가지 수정을 :
여기 내 코드입니다.
이// Remember the window that the director is attached in
window = [[[[Director sharedDirector] openGLView] window] retain];
방법의 나머지는 잘 작동이 나타납니다 ... 감독 창에서 분리 및 상태 표시 줄이 나타납니다 : 코드에서 창 변수는 init 메소드에 유지하는 응용 프로그램 창입니다. 그러나 MPMediaPickerController가 화면에 나타나야하며 그렇지 않습니다. 내가 언급했듯이, 그것은 너무 오래 전부터 잘 작동 했으므로, 여기서 무슨 일이 벌어지고 있는지에 관해서는 손해보고있다.
도움을 주셔서 감사합니다.
편집 :
[[Director sharedDirector] pause];
[[Director sharedDirector] detach];
[window addSubview:musicView];
과로 교체 :
[[[Director sharedDirector] openGLView] addSubview: musicView]
... 다음 피커 컨트롤러가 그것으로 표시됩니다 나는이 줄을 주석 경우 것으로 나타났습니다 해야한다. 이 방식은 3.0 이후에 처음으로 iPod 라이브러리 액세스를 구현할 때보기를 추가 한 방식이었습니다. 현재의 방식보다 조금 덜 복잡하기 때문에. 그러나이 방법의 문제점은 일단 피커 컨트롤러가 닫히면 터치 이벤트에서 나에게보고 된 모든 터치 좌표가 부정확해진다는 것입니다 (세로 방향으로 약 20 픽셀 더 높음). 이것이 Cocos2D의 버그인지, 아니면 컨트롤러의 openGLView에 컨트롤러를 직접 표시하는 것은 거의 불가능합니다.
하나의 참고 사항 : 일시 중지보다는 Director 's stopAnimation을 호출하면 더 나은 성능을 얻을 수 있습니다. 일시 중지하면 모달보기에서 UITableView있을 때 여전히 문제가 발생할 수 있습니다. – Boon