当前位置:  开发笔记 > 编程语言 > 正文

立即更新CALayer子图层

如何解决《立即更新CALayer子图层》经验,为你挑选了1个好方法。

我有UIView,它具有以下结构:

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

对于图层 I,设置needsDisplayOnBoundsChange = true.当我更改UIView的大小时,图层会立即重绘.但他们的子层更新有一些延迟(在下一次绘制迭代).如何使用子层depthLayerbodyLayer同步绘制图层

UIView的:

override func drawRect(rect: CGRect) {
    bodyLayer.frame = rect
    depthLayer.frame = CGRectOffset(rect, 0, 5)
}

ColdSteel.. 7

你在你看到的延迟CALayer's frames都备受因为动画- >当你作出改变的CALayer's外观它试图动画它(而且往往成功- >嗯,这就是为什么他们称之为动画层).

要禁用此行为(动画),您应该调用禁用事务,如下所示:

CATransaction.setValue(kCFBooleanTrue, forKey:kCATransactionDisableActions) //..Make Change to the frames here CATransaction.commit()

此外,我不知道无论您有真正需要重写drawRect 这件事- >如果你设置了UIView's通过框架setFrame:的方法,这是更好地重写setFrame:方法本身并调整子层的框架在那里.

很多运气!



1> ColdSteel..:

你在你看到的延迟CALayer's frames都备受因为动画- >当你作出改变的CALayer's外观它试图动画它(而且往往成功- >嗯,这就是为什么他们称之为动画层).

要禁用此行为(动画),您应该调用禁用事务,如下所示:

CATransaction.setValue(kCFBooleanTrue, forKey:kCATransactionDisableActions) //..Make Change to the frames here CATransaction.commit()

此外,我不知道无论您有真正需要重写drawRect 这件事- >如果你设置了UIView's通过框架setFrame:的方法,这是更好地重写setFrame:方法本身并调整子层的框架在那里.

很多运气!

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有