检测旋转变化的最简单方法是什么?

what is the simplest way to detect a rotation change?

我正在编写一个绘图应用程序 - 横向将内容定位在纵向的坐标系中。 viewController 检测方向变化的最简单方法是什么?

edit 我知道从 2014 年 9 月开始就有一个类似的问题,但解决方案似乎是特定于代码的——有人可以澄清一下 检测旋转的最简单方法是什么 可能是? (代码解释也很好)

我尝试了实现,但在 NSNotificationCenter

上一直收到 "expected declaration" 错误

(为了清楚起见,这里是引用的解决方案:)

在AppDelegate.swift里面"didFinishLaunchingWithOptions":

`NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)`

在 AppDelegate 中 class:

func rotated()
{
    if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation))
    {            
        println("landscape")
    }
    if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation))
    {
        println("Portrait")
    }
}

这是我发现的对旋转做出反应的最简单方法,对于大多数人来说这应该是一个简单的实现 - 被覆盖的函数被调用"any time a view's frame changed and its subviews were thus re-layed out"(来源:斯坦福大学CS193p 幻灯片)

在 viewController(将旋转的视图)中:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    // code to handle rotation details
}

这个方法有问题。如果您在主视图上添加了很多子视图,此函数将被调用多次。

我认为最好的方法是:

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

此外,你有参数可以帮助你处理。