【问题标题】:When is CALayer.timeOffset ready to be used什么时候可以使用 CALayer.timeOffset
【发布时间】: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 何时真正起作用?

有人遇到过这个问题吗?

【问题讨论】:

  • 请正确格式化。

标签: ios calayer caanimation


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 请正确格式化。请注意,在发布后的 48 小时内,您可以接受自己的答案(而且您应该这样做)。
  • 虽然我不是很高兴告诉你,正如你所说,timeOffset 似乎有一个错误。你应该接受这个答案并提交雷达
  • 我确实发现如果你设置动画的 beginTime 它似乎更快
猜你喜欢
  • 2011-02-24
  • 2012-07-09
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
相关资源
最近更新 更多