1

我有一个 UIView 的子类,它使用 CAShapeLayers 在自身上绘制图片。我希望绘图适应 AutoLayout 给出的 UIView 的任何大小。我给它一个drawGraph()函数,从它获取当前大小.bounds.size,然后绘制一张适合的图片。

我首先在容器 UIViewController's 中调用我的绘图函数viewDidLoad(),但此时布局尚未发生,因此它具有故事板中的任何边界。

我尝试从视图控制器调用它viewDidLayoutSubviews(),但这也不完全令人满意。它被调用了两次:首先使用情节提要的边界,然后再次使用更新的(正确的)边界。两者之间有一个暂停,因此用户可以看到绘制和重绘。

如何判断 UIView 是否已应用其布局约束并准备好为我提供准确的尺寸?

4

2 回答 2

1

你应该把它画在UIView'sdrawRect(rect: CGRect)中。一旦视图需要在屏幕上绘制,就会调用这个函数。

于 2016-08-08T06:34:28.863 回答
1

在我的 UIView 子类中,我通常通过重写layoutSubview()方法来编写与布局相关的代码。如果我没记错的话,它比drawRect(rect: CGRect).

但是,如果您真的只做绘图,那么您可能应该在 中进行drawRect(rect: CGRect),因为这是 Xcode 在您创建新的 UIView 子类时建议您的。

于 2016-08-08T06:57:29.233 回答