7

我有一个带有几个自定义绘制子层的 UIView(一些带有 CAShapeLayer 蒙版的 CAGradientLayers 等)。我正在使用 UIView 动画方法为其边界设置动画(同时增加其宽度和高度)。

[UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseOut|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat animations:^{
    CGRect bounds = myView.bounds;
    bounds.size.width += 20;
    bounds.size.height += 20;
    myView.bounds = bounds;
} completion:nil];

这工作得很好,除了子层没有被重绘为它的动画。最好的方法是什么?我是否需要设置一些键值观察检测边界变化并在所有子层上调用 setNeedsDisplay?

4

2 回答 2

8

在您正在制作动画的视图上设置contentModeUIViewContentModeRedraw

于 2013-04-13T14:59:08.320 回答
4

图层不像视图那样工作。如果您在父层上调用 setNeedsDisplay(如果您将 needsDisplayOnBoundsChange 设置为 YES,则会发生这种情况),它不会影响子层。您还需要调用 setNeedsDisplay 它们。

如果在调整父层大小时您的子层也需要调整大小,则在父层中实现 layoutSublayers(或 layoutSublayersOfLayer: 在其委托中)。

于 2013-04-14T18:56:06.357 回答