可能有些人看了,会说 既然写xib创建了为什么又重写init方法,在init方法中加载xib,真是多此一举,神经病。这些其实是因为当时遇到要改变布局什么的2而xib不好控制,但是view又是用xib绘制的,所以才搞了这一出~~如果亲们看了不需要,就直接close就ok了
- (void)drawRect:(CGRect)rect; // 重绘
- (void)setNeedsDisplay;
标记为需要重绘,异步调用drawRect
drawRect调用是在Controller->loadView,,Controller->viewDidLoad 两方法之后调用的。所以不用担心在控制器中,这些View的drawRect就开始画了。这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量值).
1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。
2、该方法在调用sizeThatFits后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
@interface HotProductView ()
{
CGRect myframe;
}
@end
@implementation HotProductView
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self = [[NSBundle mainBundle] loadNibNamed:@"LGHeaderView" owner:self options:nil].lastObject;
myframe = frame;
}
return self;
}
-(void)drawRect:(CGRect)rect
{
self.frame=myframe;//关键点在这里
}
参考http://blog.csdn.net/xiaoxiaobukuang/article/details/51594157
网友评论