我有UIView,它具有以下结构:
UIView
|- layer (CALayer)
|- depthLayer (CALayer)
|- bodyLayer (CALayer)
Run Code Online (Sandbox Code Playgroud)
对于图层 I,设置needsDisplayOnBoundsChange = true.当我更改UIView的大小时,图层会立即重绘.但他们的子层更新有一些延迟(在下一次绘制迭代).如何使用子层depthLayer和bodyLayer同步绘制图层?
UIView的:
override func drawRect(rect: CGRect) {
bodyLayer.frame = rect
depthLayer.frame = CGRectOffset(rect, 0, 5)
}
Run Code Online (Sandbox Code Playgroud)
你在你看到的延迟CALayer's frames都备受因为动画- >当你作出改变的CALayer's外观它试图动画它(而且往往成功- >嗯,这就是为什么他们称之为动画层).
要禁用此行为(动画),您应该调用禁用事务,如下所示:
CATransaction.setValue(kCFBooleanTrue, forKey:kCATransactionDisableActions)
//..Make Change to the frames here
CATransaction.commit()
此外,我不知道无论您有真正需要重写drawRect
这件事- >如果你设置了UIView's通过框架setFrame:的方法,这是更好地重写setFrame:方法本身并调整子层的框架在那里.
很多运气!
| 归档时间: |
|
| 查看次数: |
2624 次 |
| 最近记录: |