Ios UIView什么时候知道它有多大?
我有一个UIView的子类,它使用CAShapeLayers将图片绘制到自身上。我希望图形能够适应AutoLayout提供的UIView的任何大小。我给了它一个Ios UIView什么时候知道它有多大?,ios,swift,uiview,viewdidload,viewdidlayoutsubviews,Ios,Swift,Uiview,Viewdidload,Viewdidlayoutsubviews,我有一个UIView的子类,它使用CAShapeLayers将图片绘制到自身上。我希望图形能够适应AutoLayout提供的UIView的任何大小。我给了它一个drawGraph()函数,该函数从.bounds.size中获取其当前大小,然后绘制一张合适的图片 我首先在容器UIViewController的viewDidLoad()中调用了我的绘图函数,但此时布局还没有发生,所以它在情节提要中有任何边界 我尝试从视图控制器的viewdilayoutsubviews()调用它,但这也不是完全令人满
drawGraph()
函数,该函数从.bounds.size
中获取其当前大小,然后绘制一张合适的图片
我首先在容器UIViewController的viewDidLoad()
中调用了我的绘图函数,但此时布局还没有发生,所以它在情节提要中有任何边界
我尝试从视图控制器的viewdilayoutsubviews()
调用它,但这也不是完全令人满意的。它会被调用两次:首先是来自故事板的边界,然后是更新的(正确的)边界。中间有一个停顿,因此用户可以看到绘制和重画
如何判断UIView是否应用了布局约束并准备好为我提供准确的尺寸?您应该在
UIView
的drawRect(rect:CGRect)
中绘制它。一旦视图需要在屏幕上绘制,就会调用此函数。在UIView的子类中,我通常通过重写layoutSubview()
方法来编写与布局相关的代码。如果我没记错的话,它比drawRect(rect:CGRect)
更轻量级
但是,如果你真的只做绘图,那么你可能应该在
drawRect(rect:CGRect)
中做,因为当你创建一个新的UIView子类时,Xcode建议你这么做。你在viewwillbeen
方法中尝试过吗?