Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 停止和重置CGAffineTransform_Swift_Swift4 - Fatal编程技术网

Swift 停止和重置CGAffineTransform

Swift 停止和重置CGAffineTransform,swift,swift4,Swift,Swift4,我试图编写一段代码,当触发发生时,UIImageView的一个实例创建一个缓慢的“增长”效果,CGAffineTransform运行20秒 当触发器在第一次转换完成之前再次触发时,就会发生此问题。图像不是重置回原始大小,而是按指数缩小,具体取决于第一次变换期间触发的时间 这是我目前的代码: func changeCategoryImage() { self.categoryPanoramaImageView.transform = CGAffineTransform.identity

我试图编写一段代码,当触发发生时,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会将图像重置为原始大小。事实似乎并非如此

如何停止并重置当前正在运行的转换以启动新的转换

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

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

因此,您将视图的
变换
设置为
标识
,但不会删除现有动画。默认情况下,动画和动画是相加的。因此,你正在观察的结果

试着插入

self.categoryPanoramaImageView.layer.removeAllAnimations() 
作为函数的第一行。这样,您将删除动画并从
标识重新开始

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

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

因此,您将视图的
变换
设置为
标识
,但不会删除现有动画。默认情况下,动画和动画是相加的。因此,你正在观察的结果

试着插入

self.categoryPanoramaImageView.layer.removeAllAnimations() 
作为函数的第一行。这样,您将删除动画并从
标识开始重新开始

可能是的副本,也可能是的副本