xib创建的view(有修改不了frame的时候)

可能有些人看了,会说 既然写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

你可能感兴趣的:(xib创建的view(有修改不了frame的时候))