动画 UIButton 的文本以捏合和捏开不起作用
Animating a UIButton's Text to Pinch In and Pinch Out Doesn't work
所以我有一个 UIButton
,我想用动画更改文本。 假设 动画的工作方式是按钮的文本一直缩小到虚无,然后文本发生变化,然后按比例缩小到原始大小。我仍然坚持尝试让文本正确地缩小到虚无。
如果我使用此代码:
UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: {
//Zzzeeeewwwwwwwwww
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.001, y: 0.001);
})
//Wwwwwweeeeeeyyyyyppp
UIView.addKeyframe(withRelativeStartTime: 0.3, relativeDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100);
})
}, completion: nil)
我只得到第一部分的动画,它正确地缩小了,但之后没有按比例放大。它只是弹回原位而没有在它长回来时一直动画。
我尝试通过链接 UIView
具有持续时间 ("the old fashioned way") 的动画,结果恰恰相反。第一部分立即发生,然后它会正确地恢复。这是相关代码:
UIView.animate(withDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.01, y: 0.01);
}) { _ in
UIView.animate(withDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100);
}, completion: nil)
}
我不知道是什么导致了这个问题。我已经坚持了几个小时。我什至还没有开始更改文本。这会导致其他一系列问题。
有几点需要注意:
1。比例因子
在第一个缩放动画中指定 label.transform.scaledBy(x: 0.001, y: 0.001)
但在第二个:label.transform.scaledBy(x: 100, y: 100)
注意需要乘以1000
最后得到1.0
2。相对关键帧时间
添加关键帧的方法是通过指定相对时间,它在 [0.0 - 1.0]
范围内,因此您需要指定 0.5
而不是 0.3
以获得刚好一半的动画.考虑以下部分:
UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: {
view.transform = view.transform.scaledBy(x: 0.001, y: 0.001)
})
UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: {
view.transform = view.transform.scaledBy(x: 1000, y: 1000)
})
}, completion: nil)
如果您从标签中抽象出来,这就是您将获得的动画
所以我有一个 UIButton
,我想用动画更改文本。 假设 动画的工作方式是按钮的文本一直缩小到虚无,然后文本发生变化,然后按比例缩小到原始大小。我仍然坚持尝试让文本正确地缩小到虚无。
如果我使用此代码:
UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: {
//Zzzeeeewwwwwwwwww
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.001, y: 0.001);
})
//Wwwwwweeeeeeyyyyyppp
UIView.addKeyframe(withRelativeStartTime: 0.3, relativeDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100);
})
}, completion: nil)
我只得到第一部分的动画,它正确地缩小了,但之后没有按比例放大。它只是弹回原位而没有在它长回来时一直动画。
我尝试通过链接 UIView
具有持续时间 ("the old fashioned way") 的动画,结果恰恰相反。第一部分立即发生,然后它会正确地恢复。这是相关代码:
UIView.animate(withDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.01, y: 0.01);
}) { _ in
UIView.animate(withDuration: 0.3, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100);
}, completion: nil)
}
我不知道是什么导致了这个问题。我已经坚持了几个小时。我什至还没有开始更改文本。这会导致其他一系列问题。
有几点需要注意:
1。比例因子
在第一个缩放动画中指定 label.transform.scaledBy(x: 0.001, y: 0.001)
但在第二个:label.transform.scaledBy(x: 100, y: 100)
注意需要乘以1000
最后得到1.0
2。相对关键帧时间
添加关键帧的方法是通过指定相对时间,它在 [0.0 - 1.0]
范围内,因此您需要指定 0.5
而不是 0.3
以获得刚好一半的动画.考虑以下部分:
UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: {
view.transform = view.transform.scaledBy(x: 0.001, y: 0.001)
})
UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: {
view.transform = view.transform.scaledBy(x: 1000, y: 1000)
})
}, completion: nil)
如果您从标签中抽象出来,这就是您将获得的动画