可以让屏幕上的元素立即旋转
Posted
技术标签:
【中文标题】可以让屏幕上的元素立即旋转【英文标题】:possible to have on screen elements rotate immediately 【发布时间】:2018-02-21 23:04:06 【问题描述】:当我旋转我的设备时,屏幕中间的红色方块会移动以保持在屏幕中心,而不管旋转如何。但是,在旋转设备时,the square does not immediately reposition itself, instead the previous location of the square can be seen until the rotation animation is fully complete. 是否有一种方法可以让正方形在动画播放时立即重新定位,以便在旋转动画期间看不到它的旧位置?
import UIKit
class ViewController: UIViewController
var square = UIView()
override func viewDidLoad()
super.viewDidLoad()
square.isHidden = true
square = UIView(frame: CGRect(x: self.view.frame.width / 2 - 50, y: self.view.frame.height / 2 - 50, width: 100, height: 100))
square.backgroundColor = UIColor.red
self.view.addSubview(square)
square.isHidden = false
override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation)
square.isHidden = true
square = UIView(frame: CGRect(x: self.view.frame.width / 2 - 50, y: self.view.frame.height / 2 - 50, width: 100, height: 100))
square.backgroundColor = UIColor.red
self.view.addSubview(square)
square.isHidden = false
【问题讨论】:
【参考方案1】:两件事:
didRotate
在 ios 8 中已被弃用。它已被 viewWillTransition(to:with:)
取代。
不要创建新方块。只需更新原始正方形的框架即可。
下面的代码创建一个正方形并设置autoresizingMask
使其保持居中。无需做任何其他事情。当然你也可以设置约束来代替autoresizingMask
。
import UIKit
class ViewController: UIViewController
var square: UIView!
override func viewDidLoad()
super.viewDidLoad()
square = UIView(frame: CGRect(x: self.view.frame.width / 2 - 50, y: self.view.frame.height / 2 - 50, width: 100, height: 100))
square.backgroundColor = UIColor.red
square.autoresizingMask = [ .flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottonMargin ]
self.view.addSubview(square)
【讨论】:
谢谢!这很有帮助以上是关于可以让屏幕上的元素立即旋转的主要内容,如果未能解决你的问题,请参考以下文章