0
更新的问题如何从提供的视图控制器打开UIImagePickerController?
这里的底部就是我希望做的:
主视图控制器打开一个新的视图控制器(我不希望有一个导航栏,所以我必须要做到这一点modaly ?)然后打开相机。
在主视图控制器我有这种被称为上按下一个按钮:
CameraProcessViewController *controller = [[CameraProcessViewController alloc] initWithNibName:@"CameraProcessViewController" bundle:nil];
[self presentModalViewController:controller animated:NO];
开辟了下一个控制器。在viewDidLoad方法是下一个控制器我有:
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate: self];
[imagePicker setAllowsEditing:NO];
[self presentModalViewController:imagePicker animated:YES];
NSLog(@"Has camera");
} else {
NSLog(@"Has no camera");
}
我都试过presentModalViewController和presentViewController和两个主视图控制器和这个孩子一个之间的每个组合,而相机从来没有打开。当我将相机代码移到主视图控制器时,它会打开。
我看了看,看不清楚为什么会这样。
谢谢!
UPDATE 我发现,在viewDidLoad方法我可以调用这个:
[self performSelector:@selector(openCamera) withObject:nil afterDelay:0];
而且它加载它就好了。这是好的还是这不推荐?看起来有点哈克!
其实我只是发现,如果我的相机代码移动到它自己的方法,然后用这个称呼它在viewDidLoad中: [自performSelector:@selector(openCamera)withObject:无afterDelay:0]; 然后它的工作!有更好的方法吗?有人在awakenFromNib中提出了建议,但这并不奏效。 – 2012-02-24 18:57:43
我几乎建议。它晚于'viewDidLoad',但早于'viewWillAppear'。但是'viewDidLoad'在语义上是错误的:您可以导致视图加载而不会出现在屏幕上,并且如果您从不显示其他控制器,则显示相机没有任何意义。当然,你可能不会这样使用它。 'viewWillAppear'更准确:你知道它会出现。公平的警告是,将一个控制器置于另一个控制器之上会立即变得脆弱,即,在操作系统升级时存在问题。你对时间越不积极,就越稳定。 – smparkes 2012-02-24 19:04:25