【问题标题】:Detect rotation changes in iOS检测 iOS 中的旋转变化
【发布时间】:2013-01-16 22:41:08
【问题描述】:

我正在制作一个 iOS 应用程序,它需要在旋转时进行一些界面重新排列。我试图通过实现- (void)orientationChanged:(NSNotification *)note 来检测这一点,但这会通知我设备何时朝上或朝下。

我想要一种在界面改变方向时得到通知的方法。

【问题讨论】:

    标签: ios interface nsnotificationcenter screen-rotation autorotate


    【解决方案1】:

    有几种方法可以做到这一点,你可以在UIViewController class reference找到它们:

    – willRotateToInterfaceOrientation:duration:
    – willAnimateRotationToInterfaceOrientation:duration:
    – didRotateFromInterfaceOrientation:
    

    您也可以在 viewWillLayoutSubviews 方法中执行此操作,但要小心,因为它也会在屏幕外观上调用,并且在您添加子视图时调用。

    编辑:

    解决方案现已弃用,请参阅已接受的答案。

    【讨论】:

    • 请注意,所有这三个在 iOS 8 中都已弃用。他们建议使用转换为 size 的变体。
    【解决方案2】:

    自 iOS 8 起,上述方法已被弃用,处理和检测设备旋转的正确方法是:

    -(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id )coordinator;

    要检测设备方向,您应该(根据文档):调用statusBarOrientation 方法来确定设备方向

    【讨论】:

      【解决方案3】:

      从 iOS 8 开始,这是正确的做法。

      override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
          super.viewWillTransition(to: size, with: coordinator)
      
          coordinator.animate(alongsideTransition: { context in
              // This is called during the animation
          }, completion: { context in
              // This is called after the rotation is finished. Equal to deprecated `didRotate`
          })
      }
      

      【讨论】:

        【解决方案4】:

        斯威夫特 3:

        override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-28
          • 1970-01-01
          • 1970-01-01
          • 2020-03-17
          相关资源
          最近更新 更多