立即更新CALayer子图层

时间:2015-12-20 11:44:23

标签: ios swift calayer

我有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)
}

1 个答案:

答案 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:方法本身并调整那里的子层框架。

很多运气!

相关问题