Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中不带动画的初始子视图旋转_Swift_Animation_Uiview_Rotation_Uilabel - Fatal编程技术网

在Swift中不带动画的初始子视图旋转

在Swift中不带动画的初始子视图旋转,swift,animation,uiview,rotation,uilabel,Swift,Animation,Uiview,Rotation,Uilabel,我希望在子视图中有缩放动画(在本例中是UILabel),但设置初始旋转而不设置动画。问题是,它将从初始旋转设置为0度的动画 recordedTime?.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) recordedTime?.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180)) view.addSubview(record

我希望在子视图中有缩放动画(在本例中是UILabel),但设置初始旋转而不设置动画。问题是,它将从初始旋转设置为0度的动画

        recordedTime?.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)

        recordedTime?.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180))

        view.addSubview(recordedTime!)

        UIView.animate(withDuration: 0.50, delay: 0.0, options: [], animations: {

            recordedTime?.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)

        }, completion:nil)
我想我可以在动画中重复旋转变换,但这似乎是多余的,而且我的实际代码更复杂,因为它检查我的屏幕方向,所以我不希望代码再次重复

我想我可以在动画中重复旋转变换,但这似乎是多余的

但这不是多余的。由于视图的旋转和缩放在相同的
transform
属性中编码,因此您别无选择:必须始终将
transform
属性设置为包含所需的旋转和缩放

您可以创建属性以分别存储旋转和缩放,然后基于这些属性计算
变换

class ViewController: UIViewController {

    @IBOutlet var recordedTime: UILabel!

    private var recordedTimeRotation: CGFloat = 0 {
        didSet { updateRecordedTimeTransform() }
    }

    private var recordedTimeScale: CGFloat = 1 {
        didSet { updateRecordedTimeTransform() }
    }

    private func updateRecordedTimeTransform() {
        var transform: CGAffineTransform = .identity
        transform = transform.rotated(by: recordedTimeRotation)
        transform = transform.scaledBy(x: recordedTimeScale, y: recordedTimeScale)
        recordedTime?.transform = transform
    }

    private func run() {
        recordedTimeScale = 0.1
        recordedTimeRotation = .pi / 2
        view.addSubview(recordedTime!)

        UIView.animate(withDuration: 0.50, delay: 0.0, options: [], animations: {
            recordedTimeScale = 1
        }, completion:nil)
    }

}