将CALayer添加到UIView,并能够在方向更改时重新绘制



我有一个分配给UITableVieCell backgroundView的UIView子类。在我的 UIView 子类中,我在 initWithFrame: 方法中添加了 2 个 CALayers。

在方向改变时,单元格的高度会发生变化,我需要重新调整我的 CALayers 的位置;基本上是重新绘制。

由于 CALayers 是在 initWithFrame: 方法中添加的,因此我无法通过调用 setNeedsDisplay 来重绘它们。

我是与CALayers合作的新手,不知道这样做的正确方法是什么。如何添加我的 CALayers 以使它们在方向更改/或任何可能更改一般尺寸的事件时重绘?

实际上,更简单的方法是使用 KVO 观察视图层边界属性的变化。

[self.layer addObserver:self forKeyPath:@"bounds" options:0 context:nil];

然后在-observeValueForKeyPath:ofObject:change:context:方法中执行任何需要的操作。

完成后不要忘记removeObserver:self

UIView子类中实现- (void)layoutSubviews;方法。当视图的几何形状发生变化时,框架将调用此函数。您可以在此处对图层进行适当的更改。

在 CoreAnimation 中,如果要对图层进行子类化,则还有一个layoutSublayers方法。

希望这有帮助。

最新更新