立即更新 CALayer 子层

Update CALayer sublayers immediately

我的 UIView 具有以下结构:

UIView
  |- layer (CALayer)
    |- depthLayer (CALayer)
    |- bodyLayer (CALayer)

对于 layer 我设置了 needsDisplayOnBoundsChange = true。当我更改 UIView 的大小时,layer 会立即重绘。但是他们的子层更新有一些延迟(在下一次绘制迭代中)。如何同步绘制 layers 与子层 depthLayerbodyLayer?

UIView:

override func drawRect(rect: CGRect) {
    bodyLayer.frame = rect
    depthLayer.frame = CGRectOffset(rect, 0, 5)
}

您在 CALayer's frames 中看到的延迟是因为 动画 -> 当您更改 CALayer's 外观时 它尝试为其设置动画(并且经常成功 -> 好吧,这就是他们称为动画层的原因)。

要禁用此行为(动画),您应该像这样调用禁用事务:

CATransaction.setValue(kCFBooleanTrue, forKey:kCATransactionDisableActions) //..Make Change to the frames here CATransaction.commit()

另外我不知道你是否真的需要覆盖 drawRect 为此 -> 如果您通过 setFrame: 方法设置 UIView's 框架, 最好重写 setFrame: 方法本身并在那里调整子图层的框架。

好运!