在我的IOS应用程序中,当我打开相机时,我在相机视图上放置了一个图像。它在纵向模式下看起来很不错。但当它改为横向模式时,它看起来有些奇怪。所以我想在纵向模式下锁定UIImagePickerController
。
以下是我的ui图像选择器控制器代码
UIImagePickerController *imgPkr = [[UIImagePickerController alloc] init];
imgPkr.delegate = self;
imgPkr.sourceType = UIImagePickerControllerSourceTypeCamera;
如何以纵向模式锁定....
答案 0 :(得分:3)
或者,你可以继承UIImagePickerController:
创建一个新的UIImagePickerController类,只需将这些行添加到它。
- (BOOL)shouldAutorotate{
return NO;
}
将其导入使用相机的类,而不是使用默认的UIImagePickerController,使用您创建的类。
您的相机本身应停止自动旋转。
答案 1 :(得分:2)
这不是最好的解决方案,但它有效:
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appDelegate.window addSubview:cameraOverlay];
imgPicker.cameraOverlayView = appDelegate.window.superview;
背景上的相机仍在旋转,但您的叠加视图不会旋转。 希望它适合你
答案 2 :(得分:2)
对我有用的唯一解决方案是类别,但我也必须添加另一种方法:
#import "UIImagePickerController+NoRotate.h"
@implementation UIImagePickerController (NoRotate)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
@end
干杯!
答案 3 :(得分:1)
您不必“在纵向模式下锁定UIImagePicker控制器”。
正如你所说“当它改为横向模式时,看起来有点奇怪”
其实我不知道你为什么说它看起来很奇怪。
但是,这是我对UIImagePicker视图的体验在横向模式下看起来很奇怪。
那是:
当AViewController作为根视图控制器时。
BViewController的视图将子视图添加到AViewController的视图中。
和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
答案 4 :(得分:0)
只需在视图控制器中编写此代码
即可- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations.
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
答案 5 :(得分:0)
在UIImagePickerController
上添加一个类别并覆盖它的shouldAutoRotateToInterfaceOrientation
方法,如下所示:
@implementation UIImagePickerController (NoRotate)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
答案 6 :(得分:0)
-(BOOL)shouldAutorotate {
return NO;}
在视图控制器中尝试此操作。这对我有用。 注意:这适用于ios6.0及以上版本
答案 7 :(得分:0)
不需要创建子类,只需为uiimagepickercontroller创建一个类别并在其上放置该行 - (BOOL)shouldAutorotate { 返回NO; }