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 /自定义叠加不会旋转

IBOutlets/actions 和自定义子视图

ios 8 的旋转问题,用于添加到 Windows 的视图

Android:在方向更改时保留相机预览,而其他视图可以旋转

将相机应用旋转复制到横向 IOS 6 iPhone