【问题标题】:Forcing a redraw of the presentation layers of a paused animation强制重绘暂停动画的表示层
【发布时间】:2013-10-04 15:38:26
【问题描述】:

我有一个包含许多动画子层的 CALayer 层次结构。动画始终是附加的,但是它们可以随时暂停(通过设置根层的速度),以便用户可以浏览动画。

我还附加了一个捏合手势,可让我放大图层。这通常工作得很好。但是,手动绘制的 CALayers(通过 drawInContext:)在缩放时会变得像素化。

在手势结束时,我确保正确更新这些图层的内容比例:

[CATransaction begin];
[CATransaction setDisableActions:YES];

...

if (recognizer.state == UIGestureRecognizerStateEnded) {
    for (CALayer *layer in _layers) {
        layer.contentsScale = _scale;
    }
}

[CATransaction commit];

但是,这直到动画移动到下一帧(用户在动画中滑动)都没有效果。

那么,问题在于动画的表示层没有被重绘。我尝试更改它们的 contentsScale,但该属性在表示层上是只读的。

奇怪的是,层次结构中的 CAShapeLayers 都被完美地重新渲染了。

如何强制重绘暂停的动画?

【问题讨论】:

    标签: ios core-graphics core-animation


    【解决方案1】:

    在我看来,强制重绘暂停动画的表示层是不可能的。

    然而,我通过移除图层并在用户结束缩放手势时重新创建它们来解决这些问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-27
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2013-11-25
      相关资源
      最近更新 更多