在ios应用程序中以纵向模式锁定UIImagePickerController

在我的IOS应用程序中,当我打开相机时,我在相机视图上放置了一个图像。 它在纵向模式下看起来不错。 但当它改为横向模式时,它看起来有些奇怪。 所以我想在Portrait模式下锁定UIImagePickerController

以下是我的ui图像选择器控制器的代码

 UIImagePickerController *imgPkr = [[UIImagePickerController alloc] init]; imgPkr.delegate = self; imgPkr.sourceType = UIImagePickerControllerSourceTypeCamera; 

它如何锁定在纵向模式….

这不是最好的解决方案,但它有效:

 AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; [appDelegate.window addSubview:cameraOverlay]; imgPicker.cameraOverlayView = appDelegate.window.superview; 

背景上的摄像头仍然会旋转,但您的叠加视图不会旋转。 希望对你有帮助

或者,您可以inheritanceUIImagePickerController的子类:

创建一个新的UIImagePickerController类,只需添加这些行。

 - (BOOL)shouldAutorotate{ return NO; } 

将其导入使用相机的类,而不是使用默认的UIImagePickerController,使用您创建的类。

您的相机本身应停止自动旋转。

对我有用的唯一解决方案是类别,但我还必须添加另一种方法:

 #import "UIImagePickerController+NoRotate.h" @implementation UIImagePickerController (NoRotate) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } @end 

干杯!

您不必“以纵向模式锁定UIImagePicker控制器”。 正如你所说“当它改为横向模式时,看起来有点奇怪”实际上我不知道为什么你说它看起来很奇怪。 但是,这是我对UIImagePicker视图的体验在横向模式下看起来很奇怪。 那就是:当AViewController作为根视图控制器时。 并且BViewController的视图将子视图添加到AViewController的视图中。 和presentModalViewController:UIImagePickerController BViewController中的presentModalViewController:UIImagePickerController 。 在横向模式下,UIImagePicker视图看起来很奇怪。

解决此问题的方法是将UIImagePickerController设置为presentModelViewController之前的根视图控制器。 下面的源代码显示了详细信息:

 - (void) onCameraButtonTapped:(UIBarButtonItem *)buttonItem { //backupRootController it's use as a backup, it will recover after close the image picker controller. self.backupRootController = [[UIApplication sharedApplication] keyWindow].rootViewController; UIImagePickerController * imageController = [[UIImagePickerController alloc] init]; imageController.sourceType = UIImagePickerControllerSourceTypeCamera; imageController.delegate = self; .... [[[UIApplication sharedApplication] keyWindow] setRootViewController:imageController]; [self presentModalViewController:imageController animated:YES]; [imageController release]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [[[UIApplication sharedApplication] keyWindow] setRootViewController:self.backupRootController]; .... } 

我希望这个解决方案可以在将来帮助其他人。 –Goman

UIImagePickerController上添加一个类别并覆盖它的shouldAutoRotateToInterfaceOrientation方法,如下所示:

 @implementation UIImagePickerController (NoRotate) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end 

只需在视图控制器中编写此代码即可

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations. return (interfaceOrientation == UIInterfaceOrientationPortrait); } 
 -(BOOL)shouldAutorotate { return NO;} 

在视图控制器中尝试此操作。 这对我有用。 注意:这适用于ios6.0及更高版本

没有必要创建一个子类,只需为uiimagepickercontroller创建一个类别并将其放在上面 – (BOOL)shouldAutorotate {return NO; }