更改时 UIView 比例动画过冲
UIView scale animation overshoots when changed
当我为视图变换的变化设置动画,然后在第一个动画完成之前在另一个动画中重置该变化时,一切都很好(此处显示为旋转)。动画平滑切换到新目标:
但是当我使用比例尺执行此操作时,动画效果非常好:
这里是破解代码:
UIView.animateWithDuration(1) {
self.someView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}
UIView.animateWithDuration(1,
delay: 0.5,
options: nil,
animations: {
self.someView.layer.transform = CATransform3DIdentity
}, completion: nil
)
还有其他人看过吗?我做错了什么吗?
编辑:是否有好的解决方法?
编辑 2:我相信这是 this question 的副本,我投票决定关闭。
你好,我不太确定你在找什么,但如果你想让视图恢复到原来的比例,你可以添加 .Autoreverse 标志。
UIView.animateWithDuration(1, delay: 0, options: .Autoreverse | .Repeat, animations: {
myView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}, completion: nil)
如果你想将动画串在一起,我会在 UIView.animateKeyframesWithDuration()
内完成
UIView.animateKeyframesWithDuration(2, delay: 0.0, options: nil, animations: {
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
// Animation 1
})
UIView.addKeyframeWithRelativeStartTime(1, relativeDuration: 0.5, animations: {
// Animation 2
})
}, completion: nil)
This blog post 给出了答案:在 iOS 8 中,UIView 动画是叠加的,这对缩放动画有一个不幸的结果。
基本上,第二个动画与第一个动画一起发生。唯一的解决方案是在开始新动画之前明确删除原始动画:
view.layer.transform = view.layer.presentationLayer().transform
view.layer.removeAllAnimations()
当我为视图变换的变化设置动画,然后在第一个动画完成之前在另一个动画中重置该变化时,一切都很好(此处显示为旋转)。动画平滑切换到新目标:
但是当我使用比例尺执行此操作时,动画效果非常好:
这里是破解代码:
UIView.animateWithDuration(1) {
self.someView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}
UIView.animateWithDuration(1,
delay: 0.5,
options: nil,
animations: {
self.someView.layer.transform = CATransform3DIdentity
}, completion: nil
)
还有其他人看过吗?我做错了什么吗?
编辑:是否有好的解决方法?
编辑 2:我相信这是 this question 的副本,我投票决定关闭。
你好,我不太确定你在找什么,但如果你想让视图恢复到原来的比例,你可以添加 .Autoreverse 标志。
UIView.animateWithDuration(1, delay: 0, options: .Autoreverse | .Repeat, animations: {
myView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}, completion: nil)
如果你想将动画串在一起,我会在 UIView.animateKeyframesWithDuration()
内完成UIView.animateKeyframesWithDuration(2, delay: 0.0, options: nil, animations: {
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
// Animation 1
})
UIView.addKeyframeWithRelativeStartTime(1, relativeDuration: 0.5, animations: {
// Animation 2
})
}, completion: nil)
This blog post 给出了答案:在 iOS 8 中,UIView 动画是叠加的,这对缩放动画有一个不幸的结果。
基本上,第二个动画与第一个动画一起发生。唯一的解决方案是在开始新动画之前明确删除原始动画:
view.layer.transform = view.layer.presentationLayer().transform
view.layer.removeAllAnimations()