立即更新CALayer子图层

Evg*_*eny 2 calayer ios swift

我有UIView,它具有以下结构:

UIView
  |- layer (CALayer)
    |- depthLayer (CALayer)
    |- bodyLayer (CALayer)
Run Code Online (Sandbox Code Playgroud)

对于图层 I,设置needsDisplayOnBoundsChange = true.当我更改UIView的大小时,图层会立即重绘.但他们的子层更新有一些延迟(在下一次绘制迭代).如何使用子层depthLayerbodyLayer同步绘制图层

UIView的:

override func drawRect(rect: CGRect) {
    bodyLayer.frame = rect
    depthLayer.frame = CGRectOffset(rect, 0, 5)
}
Run Code Online (Sandbox Code Playgroud)

Col*_*eel 7

你在你看到的延迟CALayer's frames都备受因为动画- >当你作出改变的CALayer's外观它试图动画它(而且往往成功- >嗯,这就是为什么他们称之为动画层).

要禁用此行为(动画),您应该调用禁用事务,如下所示:

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

此外,我不知道无论您有真正需要重写drawRect 这件事- >如果你设置了UIView's通过框架setFrame:的方法,这是更好地重写setFrame:方法本身并调整子层的框架在那里.

很多运气!