iPad上でcocos2dからUIImagePickerControllerを表示する

| コメント(0) | トラックバック(0)
こんにちは。開発担当のICTFです。
今回は少しハマったので、iPad上でcocos2dからUIImagePickerControllerを
表示する為の方法を書こうと思います。

UIImagePickerControllerはUIViewControllerを継承するクラスです。
大抵のサンプルコードでcocos2d上からUIViewControllerの表示は

[[[Director sharedDirector] openGLView] addSubview:viewController.view];

とすれば良いとあるのですが、UIImagePickerControllerでこれを行なった場合、SIGBARTエラーで落ちてしまいます。

iPadは画面が広いので、UIViewControllerも全画面に表示するのは無く、必要な領域に表示するべき。という考え方があるらしく、どうやらポップアップで表示する為にUIPopverControllerにUIImagePickerControllerを配置した後、UIPopverControllerを画面に置く事で実現するようです。
以下実装コードになります。

-(void) showChooseMyPic

{

CGSize winSize = [[CCDirector sharedDirector] winSize];

if (m_ImagePickerController == nil) {

// 画像選択画面の初期化

UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

if ([UIImagePickerController isSourceTypeAvailable:sourceType]) {

m_ImagePickerController = [[UIImagePickerController alloc] init];

m_ImagePickerController.delegate = self;

m_ImagePickerController.sourceType = sourceType;

m_ImagePickerController.wantsFullScreenLayout = YES;

m_UIPopoverController = [[UIPopoverController alloc] initWithContentViewController:m_ImagePickerController];

m_UIPopoverController.delegate = self;

[m_UIPopoverController setPopoverContentSize:winSize animated:NO];

}

}

// 表示

CGRect r = CGRectMake(20,20,10,10);

r.origin = [[CCDirector sharedDirector] convertToGL:r.origin];

[m_UIPopoverController presentPopoverFromRect:r inView:[[CCDirector sharedDirector] openGLView] permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

}


// 画像選択キャンセル

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

{

// PickerControll周りの解放を行なう

[self releasePicker];

}


//画像選択ポップアップの外側をタップし、画像選択画面を抜けた場合

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController

{

// PickerControll周りの解放を行なう

[self releasePicker];

}


// PickerController周りの解放

-(void) releasePicker

{

[m_ImagePickerController dismissModalViewControllerAnimated:YES];

[m_ImagePickerController.view removeFromSuperview];

[m_ImagePickerController release];

m_ImagePickerController = nil;

[m_UIPopoverController dismissPopoverAnimated:YES];

[m_UIPopoverController release];

m_UIPopoverController = nil;

}


トラックバック(0)

トラックバックURL: http://www.ict-fractal.com/MovableType/mt/mt-tb.cgi/9

コメントする

Twitterボタン
Twitterブログパーツ