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