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