我的 UIView 具有以下结构:
UIView
|- layer (CALayer)
|- depthLayer (CALayer)
|- bodyLayer (CALayer)
对于 layer,我设置了 needsDisplayOnBoundsChange = true。当我更改 UIView 的大小时,layer 会立即重绘。但是他们的子层更新有一些延迟(在下一次绘制迭代中)。如何将 layers 的绘制与子层 depthLayer 和 bodyLayer 同步?
界面 View :
override func drawRect(rect: CGRect) {
bodyLayer.frame = rect
depthLayer.frame = CGRectOffset(rect, 0, 5)
}
最佳答案
您在 CALayer 的帧
中看到的延迟是因为
动画 -> 当您更改 CALayer 的
外观时
它尝试为其设置动画(并且经常成功 -> 好吧,这就是他们称为动画层的原因)。
要禁用此行为(动画),您应该像这样调用禁用事务:
CATransaction.setValue(kCFBooleanTrue, forKey:kCATransactionDisableActions)
//..在此处更改框架
CATransaction.commit()
另外我不知道你是否真的需要重写drawRect
为此 -> 如果您通过 setFrame:
方法设置 UIView 的
框架,
最好重写 setFrame:
方法本身并在那里调整子层的框架。
好运!
关于ios - 立即更新 CALayer 子层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34380649/