我有UIView,它具有以下结构:
UIView
|- layer (CALayer)
|- depthLayer (CALayer)
|- bodyLayer (CALayer)
对于图层,我设置needsDisplayOnBoundsChange = true。当我更改UIView的大小时, layer 会立即重绘。但他们的子层更新有一些延迟(在下一次绘制迭代)。如何将图层的绘制与子图层 depthLayer 和 bodyLayer 同步?
的UIView:
override func drawRect(rect: CGRect) {
bodyLayer.frame = rect
depthLayer.frame = CGRectOffset(rect, 0, 5)
}
答案 0 :(得分:7)
您在CALayer's frames
中看到的延迟是因为。{
动画 - >当您对CALayer's
外观进行更改时
它试图为它制作动画(它经常成功 - >这就是为什么它们称为动画图层。)
要禁用此行为(动画),您应该调用这样的禁用事务:
CATransaction.setValue(kCFBooleanTrue, forKey:kCATransactionDisableActions)
//..Make Change to the frames here
CATransaction.commit()
另外,我不知道你是否真的需要覆盖drawRect
对于这个问题 - >如果您通过UIView's
方法设置setFrame:
框架,
最好覆盖setFrame:
方法本身并调整那里的子层框架。
很多运气!