立即更新CALayer子层
我有UIView它有以下结构:
UIView |- layer (CALayer) |- depthLayer (CALayer) |- bodyLayer (CALayer)
对于我设置needsDisplayOnBoundsChange = true的图层 。 当我改变UIView的大小, 层立即重绘。 但他们的子层更新有一些延迟(在下一个绘制迭代)。 如何同步sublayers depthLayer和bodyLayer的图层绘制?
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帧。
很多运气!