iOS 6.1 中用于自定义相机视图的自动旋转
Posted
技术标签:
【中文标题】iOS 6.1 中用于自定义相机视图的自动旋转【英文标题】:Autorotation in iOS 6.1 for custom camera view 【发布时间】:2013-05-02 04:56:52 【问题描述】:我已经阅读了几乎所有关于我的问题的帖子,但似乎没有一个解决方案适用于我的应用程序。
所以,我使用了一个自定义的相机视图(工具栏上有按钮和一个覆盖),它是从视图控制器模态呈现的。我的应用程序仅支持横向左右方向的方向。我想阻止相机视图在呈现时自动旋转。我已将自动旋转所需的所有方法放在我的视图控制器和我的应用程序委托上。我也检查了我的 plist 文件,支持的旋转是正确的。但是当我旋转设备时,我的相机视图会继续旋转到任何旋转(纵向和横向),导致叠加层和工具栏的位置不正确。我也无法检查相机视图的方向,因为我尝试将 NSLog 放在 shouldAutoRotate 方法上,但它根本没有被调用。
那么如何检查自定义相机视图的旋转?我怎样才能强迫它不旋转并保持静止?
如果需要我的代码,我会在这里发布。如果有人可以帮助我,我将不胜感激,因为它现在让我非常沮丧。
谢谢。干杯。
【问题讨论】:
你的项目有导航控制器? 是的,我使用导航控制器 好的,我认为目前我能做的唯一解决方法是使用 iPad 本身的按钮锁定自动旋转。 你的 ios 目标版本是什么? 也许您需要更多控制权。试用 Apple 的 AVCam 示例:developer.apple.com/library/ios/#samplecode/AVCam/Introduction/… 【参考方案1】:创建一个新的“UIImagePickerController”类,并按照给定的方式在.m文件中实现旋转代理,
// For lower iOS versions
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
return ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || ((toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)));
// For iOS version 6.0 and above
- (BOOL)shouldAutorotate
return YES;
- (NSUInteger)supportedInterfaceOrientations
return (UIInterfaceOrientationMaskLandscape);
并创建一个让我们说 MyImagePickerController 而不是 UIImagePickerController 的实例,并呈现它。这将起作用:)
【讨论】:
感谢您的回答。我现在正在尝试这个,如果它有效,我会告诉你:) 伙计,非常感谢。它运作良好。已经接受了你的回答。 :)【参考方案2】:为 UINavigationController
创建一个类别@interface UINavigationController(autoRotation)
-(BOOL)shouldAutoRotate;
@end
@implementation UINavigationController
-(BOOL)shouldAutoRotate
return [[self.viewControllers lastobject] shouldAutoRoatate];
-(NSUInteger)supportedInterfaceOrientations
return [[self.viewControllers lastobject] supportedInterfaceOrientations];
@end
在你对应的视图控制器中实现这两个方法 并返回你真正想要的方向......
【讨论】:
感谢您的回答。但我也已经尝试过这种方法。没有给我想要的结果。但也许我错过了一些东西。所以,也许我会尝试对这种方法进行更多修改。 你是怎么带上你的cameraview的?使用 presentModalViewController?如果是,您的导航堆栈中不存在您的 UIImagePickerViewController。所以你必须为你的 IMagePickerViewController 创建一个类别并调用 shouldAutoRotae... 是的,我正在使用 presentModalViewController。你能给我创建类别的示例代码吗?我一定会尝试一下,因为它似乎就是这样。【参考方案3】:xcode -> 文件 -> 新建文件 在左窗格中选择cocotouch 选择objective-c 类别->next 从下拉列表中选择 UIImageImagePickerController 上的名称 Picker 类别
进口
@interface UIImagePickerController(选择器)
-(BOOL) 应该自动旋转; -(NSUInteger)supportedInterfaceOrientations;
@结束
导入“UIImagePickerController+picker.h”
@implementation UIImagePickerController(选择器)
-(BOOL)shouldAutoRotate
return yourOrientation;
-(NSUInteger)supportedInterfaceOrientations
return yourInteger;
@结束
在此之后,当您的设备的方向发生变化时,此时您必须从您的 UINavigationController 类别中调用 shouldAutoRotate 方法,如果是,则必须确定是否显示 cameraview,然后您必须调用 Picker 的 shouldAutoRotate
见以下代码
在您的视图控制器的 shouldAutoRotate 中
-(BOOL)shouldAutoRotate
if([self presentingViewController])// Camera is present
return [instanceOfUIImagePickerController shouldAutoRotate];
return yourOrientaionNeededForThisVC;
【讨论】:
以上是关于iOS 6.1 中用于自定义相机视图的自动旋转的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义声音的 UILocalNotification 仅适用于 iOS 6.1 和 iOS 7.1,不适用于 iOS 7.0
自动布局指南:UIImagePickerController W /自定义叠加不会旋转