首页 > 解决方案 > swift - 链接 UIView 动画

问题描述

我想UIImageView通过以下步骤为我制作动画:

  1. 缩放 2 倍
  2. 缩放图像移动

所以我正在尝试这样:

UIView.animate(withDuration: 0.5, animations: {
   self.imageView.transform = CGAffineTransform(scaleX: 2, y: 2)                        
}) { _ in                        
   UIView.animate(withDuration: 1.0, animations: {
        self.imageView.transform = CGAffineTransform(translationX: -50, y: -50)
                        
   }) { _ in

        //other steps
   }
 }

但结果是在移动之前imageView恢复到以前的大小然后移动。如何移动缩放 view

我也尝试anchorPoint在块内更改图层但animate没有成功

也许有更简单的方法可以实现我的目标:缩小图像,然后聚焦在 3 个自定义点,然后放大到初始大小。

标签: swiftcore-animationcalayeruiviewanimation

解决方案


一种方法是将动画的开始放在先前动画的完成处理程序中:

UIView.animate(withDuration: 1) { 
    // animation 1
} completion: { _ in
    UIView.animate(withDuration: 2) { 
        // animation 2
    } completion: {  _ in 
        UIView.animate(withDuration: 1) { 
            // animation 3
        } completion: {  _ in 
            // etc
        }
    }
}

如果您想避免嵌套动画的塔(每个都在前一个的完成处理程序中),您可以使用关键帧动画,例如,这是一个具有三个独立关键帧的五秒动画,每个关键帧的持续时间为总计,并相应地设置其开始时间:

UIView.animateKeyframes(withDuration: 5, delay: 0) { 
    UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 1 / 3) {
        // animation 1
    }
    
    UIView.addKeyframe(withRelativeStartTime: 1 / 3, relativeDuration: 1 / 3) {
        // animation 2
    }
    
    UIView.addKeyframe(withRelativeStartTime: 2 / 3, relativeDuration: 1 / 3) {
        // animation 3
    }
}

以上适用于 Swift 5.3 及更高版本。对于早期版本,请参阅此答案的先前版本


推荐阅读