什么时候可以使用 CALayer.timeOffset

Posted

技术标签:

【中文标题】什么时候可以使用 CALayer.timeOffset【英文标题】:When is CALayer.timeOffset ready to be used 【发布时间】:2017-07-29 11:37:12 【问题描述】:

在高级 CALayer 问题上需要一些帮助。

我有一个添加 CAShapeLayer 的 UIView。图层已暂停(速度 = 0),并且附加了一个我想手动控制的动画。

与此处非常相似:Tweening / Interpolating between two CGPaths / UIBeziers - 除了我的视图是集合视图单元格。

一切都按预期工作,除了我不想从 0 位置开始。每个单元格可能从动画中的不同位置开始。

当集合视图询问我的视图时,我正在尝试将 layer.timeOffset 配置为 0.5 而不是 0。这不起作用,我尝试了我能找到的每个视图和图层以及委托回调.

我发现的唯一解决方法是: dequeueReusableCellWithIdentifier 没有设置cellView.subLayer.timeOffset = 0.5;,而是将更新发送到稍后:

dispatch_after(main_queue, a bit later, ^
  cellView.subLayer.timeOffset = 0.5
);

所以我的问题是,对于图层/动画来说,viewDidLoad 的等价物是什么。在图层上调用 timeOffset 何时真正起作用?

有人遇到过这个问题吗?

【问题讨论】:

请正确格式化。 【参考方案1】:

通过操纵动画初始时间偏移找到多个(可能不正确的)解决方案。

最终我决定完全不依赖动画来渲染初始状态。相反,我在动画之外设置了正确的属性值,并且仅在实际需要动画时、在用户交互期间添加动画,并在完成后将其删除。

这意味着代码有点多,但至少它是正确的。图层和媒体计时很棘手。我在上面找到的最好的文章在这里:

https://coveller.com/2016/05/core_animation_timing http://ronnqvi.st/controlling-animation-timing

如果您需要这样做,我强烈建议您按照 Apple 的建议暂停和恢复图层:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW15

另外,值得指出的是,在修改任何动画属性时使用 CATransaction 至关重要,有时在文档和示例中被忽略。

【讨论】:

请正确格式化。请注意,在发布后的 48 小时内,您可以接受自己的答案(而且您应该这样做)。 虽然我不是很高兴告诉你,正如你所说,timeOffset 似乎有一个错误。你应该接受这个答案并提交雷达 我确实发现如果你设置动画的 beginTime 它似乎更快

以上是关于什么时候可以使用 CALayer.timeOffset的主要内容,如果未能解决你的问题,请参考以下文章

什么时候用异常,什么时候用断言?

什么时候使用transition?什么时候使用animation?

JAVA啥时候需要NEW个对象,啥时候不用NEW可以直接用类名.方法?

什么时候可以禁用 csrf 保护

什么时候应该使用 JSF 组件,什么时候应该使用 html 标签? [关闭]

什么时候可以使用 CALayer.timeOffset