[英]Exclude UIView from animating on autorotation
需要保持自转,但排除一个UIView在方向改变时自动旋转,如何?
我需要在动画期间保持UIView静止,伴随着自转(在方向改变时发生)。 类似于iOS相机应用程序处理旋转的方式(即控件在其位置旋转)。
从shouldAutorotate()
返回false
,订阅UIDeviceOrientationDidChangeNotification
,并尝试单独手动处理每个视图的旋转事件。
如果您不需要更改任何UIViews的位置,那么效果很好,否则很难弄清楚它应该在哪里结束以及如何在那里找到它
在主UIWindow下放置一个非旋转的UIWindow,并将主UIWindow背景颜色设置为清除。
如果它只是一个项目,那么效果很好,但我不想管理一堆UIWindows
反向旋转即旋转UIView的方向与旋转方向相反。 不可靠,看起来很奇怪,它也是眩晕诱发
覆盖viewWillTransitionToSize
方法中的动画。 失败
还有很多其他很难在这里列出的东西,但它们都失败了 。
可以这样做吗? 如果是这样,怎么样?
我支持iOS8 +
更新这是@ Casey的例子中视图应该如何布局/定位:
我遇到了同样的问题,并从Apple找到了一些例子,这有助于防止UIView轮换: https : //developer.apple.com/library/ios/qa/qa1890/_index.html
但是,如果UIView未放置在屏幕中央,则应手动处理新位置。
如果您想要与相机应用程序具有相同的效果,请使用大小类(请参阅此处和此处 )。
如果没有,创建包含不旋转的视图控制器的UIWindow有什么问题? 以下代码似乎对我有用(其中UILabel表示您不想旋转的视图)。
class ViewController: UIViewController {
var staticWindow: UIWindow!
override func viewDidLoad() {
super.viewDidLoad()
showWindow()
}
func showWindow() {
let frame = CGRect(x: 10, y: 10, width: 100, height: 100)
let vc = MyViewController()
let label = UILabel(frame: frame)
label.text = "Hi there"
vc.view.addSubview(label)
staticWindow = UIWindow(frame: frame)
staticWindow.rootViewController = MyViewController()
staticWindow.windowLevel = UIWindowLevelAlert + 1;
staticWindow.makeKeyAndVisible()
staticWindow.rootViewController?.presentViewController(vc, animated: false, completion: nil)
}
}
class MyViewController: UIViewController {
override func shouldAutorotate() -> Bool {
return false
}
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return false
}
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return false
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.Portrait
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.