ios - 立即更新 CALayer 子层

标签 ios swift calayer

我的 UIView 具有以下结构:

UIView
  |- layer (CALayer)
    |- depthLayer (CALayer)
    |- bodyLayer (CALayer)

对于 layer,我设置了 needsDisplayOnBoundsChange = true。当我更改 UIView 的大小时,layer 会立即重绘。但是他们的子层更新有一些延迟(在下一次绘制迭代中)。如何将 layers 的绘制与子层 depthLayerbodyLayer 同步?

界面 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/

相关文章:

iphone - 在真实 iOS 设备上模拟位置

ios - 以编程方式向 uicollectionview 添加约束 Swift

ios - 如何在中心点旋转 CAShapeLayer

ios - CALayer 动画的 SpringWithDamping?

ios - 稍后添加 subview 以与 super View 一起动画

ios - 如何以编程方式绕过 iOS 中的代理?

ios - 在 objective-c 中放置常量字符串的最佳位置是什么?

ios - zbar - 扫描仪框架,如何使其横向显示

ios - @State 在变异函数和初始化程序中更改时不更新 SwiftUI View

swift - 无法将按钮焦点移动到下一行