我正在尝试编写代码,当触发发生时,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会将图像重置为原始大小。情况似乎并非如此。
如何暂停和重置当前正在运行的转换以启动新转换?
答案 0 :(得分:2)
我的印象是CGAffineTransform.identity会将图片重置为原始尺寸。情况似乎并非如此。
正确。事实并非如此。这不是动画的工作方式。您正在直接更改基础视图(即模型图层),但动画仍然存在(即表示层)。
因此,您要将视图transform
设置为identity
,但您不删除现有动画。动画默认是添加的。因此,您正在观察的结果。
尝试插入
self.categoryPanoramaImageView.layer.removeAllAnimations()
作为你的功能的第一行。这样,您将删除动画并从identity
重新开始。