【问题标题】:Detect iOS device orientation lock检测 iOS 设备方向锁定
【发布时间】:2011-03-23 19:47:03
【问题描述】:

如何以编程方式检查设备方向是否在 iOS 中被锁定?我在 UIDevice 中什么也看不到。我知道这应该对应用程序是透明的。但是,如果方向被锁定,我想更改显示内容的方式(就像 Youtube 应用程序一样;它锁定为横向而不是纵向)。这一定是可能的。

【问题讨论】:

  • YouTube 的做法也不完美;如果您离开并返回应用程序,如果视频被锁定,视频将旋转为纵向。

标签: iphone ios orientation


【解决方案1】:

您可以使用UIAccelerometer 类来详细确定手机的方向。如果加速度矢量进入其最大绝对分量位于 X 轴上的状态,则为横向。从理论上讲,这可以用来检测方向锁定:如果在发生这种情况的几秒钟内,控制器没有收到对shouldRotateToInterfaceOrientation 的调用,并且[[UIDevice currentDevice] orientation] 属性不在横向,那么您可以安全地假设用户已锁定方向。

这很复杂,并且有延迟,因为shouldRotateToInterfaceOrientation 将在实际矢量实际进入景观区域之后被调用。整个想法有点小题大做,您可能应该重新考虑为什么当用户不希望显示横向视图时,您真的需要呈现横向视图。

【讨论】:

    【解决方案2】:

    无法检测方向是否已锁定。 YouTube 应用不会锁定为横向,它只会以横向显示电影,但是当您旋转 iPhone 时,电影也会旋转(如果没有方向锁定)。

    IOW 方向锁定由系统处理,对您的应用程序透明。

    如果您想实现此功能 - 即使 iPhone 处于纵向模式,也只需以横向模式显示您的视图,然后再启用您的视图旋转。它的行为方式与 YouTube 应用相同。

    评论更新:

    .h
    
    BOOL rotationEnabled;
    
    .m
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
      return rotationEnabled || ( toInterfaceOrientation == UIInterfaceOrientationLandscapeRight );
    }
    
    - (void)viewDidAppear:(BOOL)animated {
      [super viewDidAppear:animated];
      rotationEnabled = YES;
    }
    

    【讨论】:

    • 我知道以特定方向显示视图的唯一方法是:- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) toInterfaceOrientation { toInterfaceOrientation == UIInterfaceOrientationLandscapeRight;} 但这会禁用自动旋转。
    • 看看我更新的答案。如何在 LandscapeRight 中初始显示然后允许旋转的示例。
    • 在 iOS 6 中,shouldAutorotateToInterfaceOrientation: 方法已被弃用,但新方法 preferredInterfaceOrientationForPresentation 将提供与此 sn-p 相同的行为,无需任何额外代码。
    【解决方案3】:

    我认为您无法确定方向是否已锁定。我前段时间找过,什么也没找到。你可以做的是忽略方向,只在你的视图控制器中提供横向......然后无论如何它都会以横向显示。

    我认为这也是 youtube 正在做的事情。

    【讨论】:

    • 是的,这就是我所担心的。但是 youtube 确实检测到了锁。如果我纵向握住手机并打开视频,它会纵向播放(并在我旋转手机时旋转)。如果我锁定方向并做同样的事情,它会以横向打开。这不是默认行为。 Youtube 正在检测锁定并切换到横向。
    • @wombat57 默认行为。 -[UIViewController shouldRotateToInterfaceOrientation:] 在设置或取消设置锁时调用。
    • 设置锁的时候调用没关系;我的应用程序可能没有运行。问题在于将锁定的肖像与未锁定的肖像区分开来。主要是 Izzy 有一个很好的轮换解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2018-05-03
    • 2015-12-11
    相关资源
    最近更新 更多