我有一个基于UIView的控件,我需要调整大小,具体取决于控件的各种标准和属性。我不确定我这样做的方式是否是最好的方式,但到目前为止,它是我发现的唯一可行的方法。因为控件的大小取决于各种属性,所以我无法在构造函数中设置大小。
我有一个名为setupControl的方法:它包含根据属性集完成设置的所有代码。我不想要setupControl:手动调用,所以在drawRect中我检测是否需要调用它然后对这样的选择器进行排队:
[self performSelector:@selector(setupControl)withObject:self afterDelay:0];
return;
在setupControl的底部:然后我执行:
[self setNeedsDisplay];
self.hidden = NO;
我还重写了initWithFrame:和initWithDecoder:构造函数,以便将UIView设置为隐藏,直到执行设置代码为止。当控件调整大小时,想法是消除显示器上的任何“闪烁”。
正如我所说,这样可以正常工作,控件可以绘制为xib文件,然后在运行时将自己设置为正确的大小。
我的问题是这种排队选择器的方法,退出drawRect:然后使用setNeedsDisplay是唯一的方法吗? O是否有一些方法我没有发现我可以覆盖?或其他什么?
答案 0 :(得分:3)
您可能想要覆盖的是layoutSubviews而不是drawRect,因为您正在更改布局,而不是实现自定义绘图。
您可能还必须为更改视图大小的任何属性使用自定义setter,并在setter中调用[self setNeedsLayout]
以确保在计算视图大小之前调用layoutSubviews方法。