如何在 Swift 中进一步变换/动画化已经变换/动画化的 UIView?



每次点击UIImageView时,我都尝试将UIImageView动画旋转5°。但是,每次我点击它时,它似乎都会恢复到原始角度并从那里开始动画,而不是从它已经存在的地方开始。我知道转换需要链接,所以我正在这样做,但它仍然不起作用:

UIView.animate(withDuration: 1.0, animations: {
self.imgView.transform = self.imgView.transform.concatenating(CGAffineTransform(rotationAngle: CGFloat.pi/180*5))
}, completion: nil)

我在 animate 函数的变体中发现了一个有前途的选项,但这让它看起来更糟(不知何故甚至使图像乱码(:

UIView.animate(withDuration: 1.0, delay: 0.0, options: .beginFromCurrentState, animations: {
self.imgView.transform = self.imgView.transform.concatenating(CGAffineTransform(rotationAngle: CGFloat.pi/180*5))
}, completion: nil)

我做错了什么?

顺便说一句,视图最初有一个比例和平移转换,该转换在 viewDidLoad 中设置一次:

imgView.frame = CGRect(x: 0, y: view.frame.maxY-view.frame.midX, width: view.frame.maxX, height: view.frame.maxX)
imgView.transform = CGAffineTransform.identity.scaledBy(x: 14, y: 14).translatedBy(x: 0, y: 150)

我提到这一点只是为了以防问题与这篇文章有关。

每次调用变换时增加角度

angel = angel + 0.5
self.imgView.transform = self.imgView.transform.concatenating(CGAffineTransform(rotationAngle: CGFloat.pi/180* angel))

我发现了问题。这是初始翻译dBy。如果我把它拿出来,它就会完美地工作。 所以现在我知道,视图的定位应该始终通过框架和/或约束来完成,而不是通过平移dBy来完成。

最新更新