Swift 停止和重置CGAffineTransform
我试图编写一段代码,当触发发生时,UIImageView的一个实例创建一个缓慢的“增长”效果,CGAffineTransform运行20秒 当触发器在第一次转换完成之前再次触发时,就会发生此问题。图像不是重置回原始大小,而是按指数缩小,具体取决于第一次变换期间触发的时间 这是我目前的代码:Swift 停止和重置CGAffineTransform,swift,swift4,Swift,Swift4,我试图编写一段代码,当触发发生时,UIImageView的一个实例创建一个缓慢的“增长”效果,CGAffineTransform运行20秒 当触发器在第一次转换完成之前再次触发时,就会发生此问题。图像不是重置回原始大小,而是按指数缩小,具体取决于第一次变换期间触发的时间 这是我目前的代码: func changeCategoryImage() { self.categoryPanoramaImageView.transform = CGAffineTransform.identity
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会将图像重置为原始大小。事实似乎并非如此
如何停止并重置当前正在运行的转换以启动新的转换
我的印象是CGAffineTransform.identity会将图像重置为原始大小。事实似乎并非如此
对。事实并非如此。动画不是这样工作的。您正在对基础视图(即模型层)进行直接更改,但动画仍然存在(即表示层)
因此,您将视图的变换
设置为标识
,但不会删除现有动画。默认情况下,动画和动画是相加的。因此,你正在观察的结果
试着插入
self.categoryPanoramaImageView.layer.removeAllAnimations()
作为函数的第一行。这样,您将删除动画并从标识重新开始
我的印象是CGAffineTransform.identity会将图像重置为原始大小。事实似乎并非如此
对。事实并非如此。动画不是这样工作的。您正在对基础视图(即模型层)进行直接更改,但动画仍然存在(即表示层)
因此,您将视图的变换
设置为标识
,但不会删除现有动画。默认情况下,动画和动画是相加的。因此,你正在观察的结果
试着插入
self.categoryPanoramaImageView.layer.removeAllAnimations()
作为函数的第一行。这样,您将删除动画并从标识开始重新开始
可能是的副本,也可能是的副本