检测旋转变化的最简单方法是什么?
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
}
此外,你有参数可以帮助你处理。
我正在编写一个绘图应用程序 - 横向将内容定位在纵向的坐标系中。 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
}
此外,你有参数可以帮助你处理。