ios - UIViewPropertyAnimator 在 iOS10 和 iOS11 上反转动画的不同行为。 `isReversed` 和 `fractionComplete` 属性上的错误?

标签 ios uikit ios10 ios11 uiviewpropertyanimator

问题
在 iOS10 和 iOS11 上运行相同的代码,我的 UIViewPropertyAnimator 在更改其 .isReversed 属性后具有不同的行为。

iOS10一切正常。 iOS11出现动画问题

条件
对于任何动画都是如此,而不仅仅是特定的动画,并且可以通过观看动画和代码来验证。 它在模拟器和真实设备上都会发生。

详情
使用他的动画创建 UIViewPropertyAnimator 后,在其运行期间我只需调用 .pauseAnimation() 并将 .isReversed 属性更改为 true。之后我恢复动画调用:

continueAnimation(withTimingParameters parameters: UITimingCurveProvider?, durationFactor: CGFloat)

此时在 iOS10 上动画平滑地改变了他的诗句,在 iOS11 上它立即停止并自行反转,但有一点帧延迟。

如果在代码中我检查 .fractionComplete 的值(在我的 UIViewPropertyAnimator 对象上调用,它会以他的百分比值返回动画的完成情况,从 0.0 开始到 1.0 结束) 就在 .continueAnimation(...

- 在 iOS 10 上,它会保留片刻,就像动画在继续一样,只有在几分之一的时间后才会跳到他的互补部分。

- 在 iOS 11 上它突然跳到他的补充


在文档中没有与此相关的更新,只有 UIViewPropertyAnimator 的几个新属性但未使用,因为我的目标是 iOS10

可能是错误或我遗漏了什么!?


小更新:刚刚测试,iOS 11.0.1 和 iOS 11.1 beta1 上的行为相同

如评论中所链接,这只发生在非线性曲线上!

最佳答案

我也为此苦苦挣扎了一段时间,但后来我注意到在 iOS 11 中添加到 UIViewPropertyAnimatorscrubsLinearly 属性:

Defaults to true. Provides the ability for an animator to pause and scrub either linearly or using the animator’s current timing.

请注意,该属性的默认值为true,这似乎与使用非线性动画曲线有冲突。这也可以解释为什么在使用线性时序函数时问题不存在。

scrubsLinearly 设置为 false,动画师似乎按预期工作:

let animator = UIViewPropertyAnimator(duration: 0.25, curve: .easeOut) {
   ...
}
animator.scrubsLinearly = false

关于ios - UIViewPropertyAnimator 在 iOS10 和 iOS11 上反转动画的不同行为。 `isReversed` 和 `fractionComplete` 属性上的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46406670/

相关文章:

ios - 如何向 AWS Pinpoint 提供 ios 设备 token

ios - 如何使用 isKind(of : .) 检查对象类型?

objective-c - 如何自定义 UIWebView 点按链接表

swift - 在 SpeechKit 框架中连续收听用户语音并检测语音结束静音

ios - 如何修复 swift 3 中的 "missing argument label in call"

ios - 使用 UIWebView 进行手势识别

ios - 使用 Apple Pencil 流畅绘图

ios - 调用文本字段 :shouldReplaceCharactersInRange from a delegate method

objective-c - 如何将 CallKit API 集成到 iOS 10 的 Objective C?

ios - 将 UITableViewCell 向右移动一位