我有一个UIView的子类,它使用CAShapeLayers将图片绘制到自身上。我希望绘图能够适应AutoLayout给出的UIView的大小。我给它一个drawGraph()
函数,从.bounds.size
获取当前大小,然后绘制图片以适应。
我首先在容器UIViewController的viewDidLoad()
中调用我的绘图函数,但此时布局尚未发生,因此它具有故事板中的任何界限。
我尝试从视图控制器的viewDidLayoutSubviews()
调用它,但这也不完全令人满意。它被调用两次:首先使用故事板的边界,然后再使用更新的(正确的)边界。中间有一个暂停,因此用户可以看到绘图和重绘。
如何判断UIView是否已应用其布局约束并准备好为我提供准确的尺寸?
答案 0 :(得分:1)
您应该在UIView
drawRect(rect: CGRect)
中绘制它。一旦视图需要在屏幕上绘制,将调用此函数。
答案 1 :(得分:1)
在我的UIView子类中,我通常通过覆盖layoutSubview()
方法来执行与布局相关的代码。如果我没记错的话,它比drawRect(rect: CGRect)
更轻量级。
但是如果你真的只是绘图那么你应该在drawRect(rect: CGRect)
中进行,因为这是Xcode在你创建一个新的UIView子类时建议的。