立即更新CALayer子层

我有UIView它有以下结构:

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

对于我设置needsDisplayOnBoundsChange = true的图层 。 当我改变UIView的大小, 立即重绘。 但他们的子层更新有一些延迟(在下一个绘制迭代)。 如何同步sublayers depthLayerbodyLayer图层绘制?

UIView的:

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

你在CALayer's frames中看到的延迟是因为animation – >当你改变CALayer's外观时,它会尝试对它进行animation处理(而且它经常会成功 – >这就是为什么他们称为animation层)。

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

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

此外,我不知道你有一个真正的需要重写这个问题的drawRect – >如果你通过setFrame:方法设置UIView's框架,最好重写setFrame:方法本身,并调整subLayers帧。

很多运气!