【发布时间】:2017-12-06 23:47:29
【问题描述】:
我正在尝试在我的应用中实现全屏 UIImagePickerController。我无法在viewDidLoad 中显示视图控制器,因为presenting view controllers on detached view controllers is discouraged。但是,我的viewDidAppear 被无限调用,并且图像选择器控制器被添加,然后在每次调用时从屏幕上掉下来。我尝试分派到主队列,但这并没有解决问题。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
ipc = [[UIImagePickerController alloc] init];
ipc.delegate = self;
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
ipc.showsCameraControls = NO;
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0);
ipc.cameraViewTransform = translate;
CGAffineTransform scale = CGAffineTransformScale(translate, 1.333333, 1.333333);
ipc.cameraViewTransform = scale;
ipc.showsCameraControls = NO;
ipc.tabBarController.tabBar.hidden = YES;
ipc.allowsEditing = NO;
[self presentViewController:ipc animated:YES completion:nil];
}
}
#pragma mark - ImagePickerController Delegate
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage* theImage = [info objectForKey:UIImagePickerControllerOriginalImage];
if( picker.sourceType == UIImagePickerControllerSourceTypeCamera )
{
UIImageWriteToSavedPhotosAlbum(theImage, nil, nil, nil);
}
int height = -1;
if([[NSUserDefaults standardUserDefaults] integerForKey:@"reduce_image"] == 0){
height = 640;
} else if ([[NSUserDefaults standardUserDefaults] integerForKey:@"reduce_image"] == 1) {
height = 1024;
} else {
height = 1600;
}
UIImage* resizedImageForUpload = [UtilityFunctions scaleAndRotateImage:theImage maxResolution:height];
NSData* imageDataForUpload = UIImageJPEGRepresentation(resizedImageForUpload, 1); // reduced image! //
NSString *userDataset = [UtilityFunctions retrieveFromUserDefaults:@"dataset"];
[self didPickImage:imageDataForUpload atLocation:currentLocation
userDataset: userDataset];
[picker dismissViewControllerAnimated:YES completion:nil];
[mLocationManager stopUpdatingLocation];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
/*navigate to home tab*/
[picker dismissViewControllerAnimated:YES completion:nil];
self.tabBarController.tabBar.hidden = NO;
[self.tabBarController setSelectedIndex:0];
}
【问题讨论】:
-
在我看来问题出在代码的其他地方。你在 ipc 的委托方法中做什么?
-
使用委托方法更新:)
-
在您的选择器
dismissViewControllerAnimated上设置断点可能会有所帮助。我认为它被意外解雇了。 -
@mschmidt 你是对的!我关闭了
viewWillDisappear中的图像选择器控制器,这就是让我们进入这个循环的原因! -
不相关,但为什么要先创建图像选择器,然后检查源类型是否可用?那是倒退。
标签: ios objective-c uiimagepickercontroller presentviewcontroller viewdidappear