1

我正在使用 cocos2d 开发一个 iPad 应用程序,我正在尝试从库中选择一张图片,或者使用相机拍照,以便在应用程序中使用。昨天和今天,我整天都在疯狂地搜索,试图拼凑一些东西来完成上述工作,但我可能应该首先承认我真的不知道自己在做什么。

我现在的工作方式是,您点击当前用户图像,它会弹出一个菜单,询问您是否要从相机或库上传不同的图片。选择相机调用如下(和库版本基本相同):

- (void) onGetCameraImage
{
    UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.allowsEditing = NO;

    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    [imagePicker presentViewController:[CCDirector sharedDirector] animated:YES completion:NULL];
}

当我尝试对此进行测试时(当然,选择库,因为模拟器不能做摄像头,是的,我确实打算实现对没有摄像头的检查),我得到以下崩溃:

2013-04-07 19:21:50.248 prototype1[20897:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <UIImagePickerController: 0x9e87ac0>.'

我认为它在presentViewController调用时崩溃了,但是我很难找出我做错了什么,因为所有教程和 stackoverflow 答案都使用了已弃用的模态函数调用!我怀疑我只是在我以前的代码中做各种疯狂的 BS?无论哪种方式,我都不知道如何让我的代码工作。

很多代码都是从堆栈溢出中收集的,所以我不能保证其中任何一个的敏感性——我对 iOS 编码很陌生,基本上是被扔到这个项目中的,我们只是想让它工作. 请帮忙!

4

3 回答 3

1

是的,这里似乎有些不对劲。为了在实例化时实现您的目标,UIImagePickerController您通常希望当前视图控制器呈现您的图像选择器实例。发生崩溃是因为:

  1. 你是在告诉 imagepicker 展示来自 Cocos2D 的东西
  2. UIImagePickerController视图甚至还没有出现在屏幕上

您可以访问视图控制器吗?

如果是这样,您可以简单地执行以下操作:

[self presentViewController:imagePicker animated:YES completion:nil];

self的某个子类在哪里UIViewController

希望这可以帮助!

于 2013-04-08T02:55:22.190 回答
0

只需更改最后一行如下所示

 [imagePicker presentViewController: imagePicker animated:YES completion:nil];
于 2013-04-09T09:09:10.153 回答
-1

还有一件事,在设置之前

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera

您必须检查源类型是否可用。

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];

imagePicker.delegate = self;

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

imagePicker.allowsEditing = YES;

[self presentModalViewController:imagePicker animated:YES];

[imagePicker release];

 }

 else
 {
 //.....
 }  
于 2013-04-08T03:59:10.487 回答