当用户在我的应用中的相机标签上标记以拍摄照片时,我想立即呈现UIImagePickerController
(类似于许多照片拍摄应用程序,如Instagram等)。目前,我有一个名为CameraViewController
的VC,它显示从UIImagePickerController获取的图片,并在viewWillAppear
CameraViewController
函数中显示ImagePickerController
模态当我发现没有拍摄照片时。
虽然这在大部分时间都有用,但我注意到有时我会得到例外说法:
“因未捕获的异常而终止应用程序'NSInvalidArgumentException',原因:'应用程序尝试以模态方式呈现活动控制器。”
根据这里提出的一些SO问题的建议,我也尝试在viewDidAppear
中展示控制器。但是,对于viewDidAppear
,模态ImagePicker永远不会被解雇,并且我不断收到错误“对开始/结束外观转换的不平衡调用。”
我的问题是:
这是我的代码:
viewWillAppear
中的
BOOL modalPresent = (BOOL)(self.presentedViewController);
if (!appDelegate.imageStorageDictionary[@"picture1"]){
if (modalPresent == NO){
[self presentViewController:self.imagePickerController animated:NO completion:nil];
}
}
imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
中的
//Other lines omitted
if (![[self imagePickerController] isBeingDismissed])
[self dismissViewControllerAnimated:NO completion:nil];
答案 0 :(得分:1)
我对你关于-viewWillAppear
的问题并没有太多了解,但有一件事你必须知道-viewWillAppear
会被多次召唤。原因是,第一个电话会在您加载viewController
并viewDidLoad
时出现并且会照常调用,其次是当您提出modalViewController (imagePickerController)
时再次被解除时viewWillAppear
if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
if(myPicker)
{
[myPicker release];
myPicker = nil;
}
myPicker = [[UIImagePickerController alloc] init];
[self presentViewController:myPicker animated:YES completion:NULL];
}
else
{
UIAlertView *altnot=[[UIAlertView alloc]initWithTitle:@"Camera Not Available" message:@"Camera Not Available" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
altnot.tag=103;
[altnot show];
[altnot release];
}
将调用1}}因为viewController的视图即将出现..
其次,当用户点击相机按钮时,您想要当前相机的功能,请执行以下操作:
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
{
if(myPicker)
{
[myPicker release];
myPicker = nil;
}
myPicker = [[UIImagePickerController alloc] init];
myPicker.delegate = self;
myPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
myPicker.allowsEditing = NO;
}
[self presentViewController:myPicker animated:YES completion:NULL];
用于挑选已捕获的图像..
- (无效)ChooseAlreadyCapturedPhoto {
imagePicker-controller
}
注意:我每次使用时都释放了以前分配的选择对象,但没有必要。您可以使用我的选择器的唯一单个实例,不要标记错误。在viewController
里面使用{{1}}绝对没问题,它不会有害。如果你提出并解雇modalViewController一个没有。时间,然后每次你解雇时都会调用viewWill。