可以让屏幕上的元素立即旋转

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】:

两件事:

    didRotateios 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)
    

【讨论】:

谢谢!这很有帮助

以上是关于可以让屏幕上的元素立即旋转的主要内容,如果未能解决你的问题,请参考以下文章

防止Android上的屏幕旋转

固定方向Android上的设备旋转

元素滚动到屏幕后立即触发事件[重复]

如何在本机反应中解锁一个屏幕上的旋转

在横向屏幕上旋转不是 iPhone 5 和 iPhone 6 上的视图

屏幕旋转