UIViewPropertyAnimator在iOS10和iOS11上反转动画的不同行为。 `isReversed`和`fractionComplete`属性的错误?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIViewPropertyAnimator在iOS10和iOS11上反转动画的不同行为。 `isReversed`和`fractionComplete`属性的错误?相关的知识,希望对你有一定的参考价值。
问题
在ios10和iOS11上运行相同的代码,我的UIViewPropertyAnimator在改变他的.isReversed
属性后就有了不同的行为。
在iOS10上一切都很好。动画问题发生在iOS11上
条件 对于任何动画都是如此,不仅对于特定的动画,它都可以通过观看动画和代码来验证。它发生在模拟器和真实设备上。
细节
一旦用他的动画创建了一个UIViewPropertyAnimator,在它运行期间我只需调用.pauseAnimation()
并将.isReversed
属性更改为true。之后我恢复了动画调用:
continueAnimation(withTimingParameters parameters: UITimingCurveProvider?, durationFactor: CGFloat)
在iOS10的这一点上,动画平滑地改变了他的诗句,在iOS11上它立即停止并且以一点帧滞后反转。
如果在代码中我检查.fractionComplete
的值(在我的UIViewPropertyAnimator对象上调用,它在.continueAnimation(...
之后让我回到动画完成百分比值,从0.0开始,到1.0结束)
- 在iOS 10上,它会保留一段时间,就好像动画正在继续,并且只有在一段时间后跳到他的补充。
- 在iOS 11上,它突然跳起来补充
在文档上有与此相关的非更新,只是UIViewPropertyAnimator的几个新属性但未使用,因为我的目标是iOS10
可能是一个错误或我错过了什么!?
小更新:刚刚测试过,iOS 11.0.1和iOS 11.1 beta1上的行为相同
在评论中链接,这只发生在非线性曲线上!
我一直在争论这个问题很长一段时间,但后来我注意到在iOS 11中添加到scrubsLinearly
的UIViewPropertyAnimator
属性:
默认为true。使动画师能够线性地或使用动画师的当前时间暂停和擦洗。
请注意,此属性的默认值为true
,这似乎与使用非线性动画曲线产生冲突。这也可以解释为什么在使用线性定时功能时不存在该问题。
将scrubsLinearly
设置为false
,动画师似乎按预期工作:
let animator = UIViewPropertyAnimator(duration: 0.25, curve: .easeOut) {
...
}
animator.scrubsLinearly = false
- 在iOS 11上,在你通过
fractionComplete
反转动画后,1 - originalFractionComplete
将被颠倒(即animator.isReversed = true
)。 - 持续时间少于0.1秒的Spring动画将立即完成。
因此,您可能最初想要反转动画运行整个动画持续时间的90%,但在iOS 11上,反转动画实际上持续10%持续时间因为isReversed
改变了,并且10%持续时间小于0.1s,所以动画将是立即完成,看起来没有动画发生。
怎么修?
对于iOS 10向后兼容性,请在反向动画之前复制fractionComplete
值并将其用于continueAnimation
。
EG
let fraction = animator.fractionComplete
animator.isReversed = true
animator.continueAnimation(...*fraction*...)
以上是关于UIViewPropertyAnimator在iOS10和iOS11上反转动画的不同行为。 `isReversed`和`fractionComplete`属性的错误?的主要内容,如果未能解决你的问题,请参考以下文章
UIViewPropertyAnimator在iOS10和iOS11上反转动画的不同行为。 `isReversed`和`fractionComplete`属性的错误?
将 UIPanGestureRecognizer 速度添加到 UIViewPropertyAnimator
UIViewPropertyAnimator中duration和UISpringTimingParameters如何交互?