停止并重置CGAffineTransform

时间:2018-01-24 00:11:04

标签: swift swift4

我正在尝试编写代码,当触发发生时,UIImageView实例会在CGAffineTransform运行20秒时产生缓慢的“增长”效果。

在第一次转换完成之前再次发生触发时会发生此问题。它不是将图像重置回原始大小,而是按指数缩小,具体取决于第一次转换期间触发器的发生时间。

这是我目前的代码:

func changeCategoryImage() {
    self.categoryPanoramaImageView.transform = CGAffineTransform.identity

    UIView.transition(with: self.categoryPanoramaImageView, duration: 0.4, options: .transitionCrossDissolve, animations: {
        self.categoryPanoramaImageView.image = self.newPanoramaImage
    }) { (done) in
        UIView.animate(withDuration: 10, animations: {
            self.categoryPanoramaImageView.transform = CGAffineTransform(scaleX: 5.0, y: 5.0)
        })

    }
}

我的印象是CGAffineTransform.identity会将图像重置为原始大小。情况似乎并非如此。

如何暂停和重置当前正在运行的转换以启动新转换?

1 个答案:

答案 0 :(得分:2)

  

我的印象是CGAffineTransform.identity会将图片重置为原始尺寸。情况似乎并非如此。

正确。事实并非如此。这不是动画的工作方式。您正在直接更改基础视图(即模型图层),但动画仍然存在(即表示层)。

因此,您要将视图transform设置为identity,但您删除现有动画。动画默认是添加的。因此,您正在观察的结果。

尝试插入

self.categoryPanoramaImageView.layer.removeAllAnimations() 

作为你的功能的第一行。这样,您删除动画并从identity重新开始。