【问题标题】:How to detect Camera Overlay view rotation如何检测相机叠加视图旋转
【发布时间】:2012-02-20 15:17:04
【问题描述】:

我正在尝试根据屏幕方向在相机顶部制作相机叠加视图。因为即使您在设置中锁定屏幕方向,相机仍会旋转其 UI(实时预览中的闪光灯和相机按钮),如果我不移动我拥有的元素覆盖视图,它停留在这些视图之上。

我已经通过注册 UIDeviceOrientationDidChangeNotification 通知,然后读取 [UIDevice currentDevice].orientation 上的值并设置我的相机叠加视图的变换值来完成此操作。

问题在于,当用户在 iPhone 上锁定界面时,UIDeviceOrientationDidChangeNotification 通知不会触发(但相机一直在旋转!)。

我尝试了许多替代方法,例如注册PLCameraDeviceOrientationChangedNotification 通知,当我将自己注册为每个通知的观察者时,我发现它被解雇了,但它不包含 userInfo 字典上的方向。 我还尝试将NSTimer 设置为每 0.5 秒触发一次并检查[UIDevice currentDevice].orientation,但它总是在锁定时报告 UIDeviceOrientationPortrait,无论实际设备方向如何。

有没有任何方式我可以找出相机所在的方向,并且理想情况下,即使用户锁定了界面方向,也可以在它发生变化时得到通知?

谢谢。

【问题讨论】:

    标签: iphone ios cocoa-touch


    【解决方案1】:

    我的观点是,如果用户锁定设备方向,就不可能获得有关方向的设备消息。

    但加速度计从不撒谎,应该为您提供正确的信息。

    请看一下: Detect iPhone screen orientation

    编辑: 这是苹果的示例,用于使用加速度计。

    https://developer.apple.com/library/ios/#samplecode/AccelerometerGraph/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007410

    【讨论】:

    • 你认为这就是相机的作用吗?还有..从加速度中获取 UIDeciveOrientation 值是否容易...?
    • 我认为当您锁定屏幕方向时,系统会阻止任何 viewController 调用自动旋转消息。如果是这样,你必须使用不同于 UIDeviceOrientation 的东西,比如加速度计。试试吧,如果你找到一个好的样本(我的编辑中的苹果一个),这并不难
    • 嗯,是的,这只是使用加速度计的一个例子,但从中获得 UIDeviceOrientation 并不容易,我不想自己“想办法”然后不会t 报告相机认为设备所处的相同方向...不过谢谢!
    • 您无法以这种方式获得 UIDeviceOrientation,但一些坐标可以告诉您手机倾斜了多少度。好的,我将在我的可可项目中搜索并返回一个示例
    • 但是我需要为相机认为设备所在的方向设置相同的值。否则,我对相机覆盖 UI 的调整将与相机控件的调整不同......这就是为什么拿学位然后假设方向是危险的imo。但恐怕没有其他方法了:(
    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多