在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; }