****************************layoutSubviews************************************
layoutSubviews是UIView中的属性方法,即只要继承于UIView,就可以使用这个方法,这个方法也很强大,以下是他的触发时机:
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
在这些触发情况下,我们就可以妙用他,比如说改变数据等等,这是个很不错的方法
而且我们也可以手动调用,即
[self setNeedsLayout];
注意:调用layoutSubviews,也需要调用它的父类方法,即
[super layoutSubviews]
传说如果不调用的话会出现奇怪的问题。
************************************initWithFrame,initWithCoder********************************
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];// 先调用父类的initWithFrame方法
if (self) {
// 再自定义该类(UIView子类)的初始化操作。
_scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
[_scrollView setFrame:CGRectMake(0, 0, 320, 480)];
_scrollView.contentSize = CGSizeMake(320*3, 480);
[self addSubview:_scrollView];
}
return self;
}
当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化
- (id)initWithFrame:(CGRect)frame
{
if (self =[superinitWithFrame:frame]) {
// 初始化代码
}
return self;
}
用于视图加载nib文件,从nib中加载对象实例时,使用 initWithCoder初始化这些实例对象
- (id)initWithCoder:(NSCoder*)coder
{
if (self =[superinitWithcoder:coder]) {
// 初始化代码
}
return self;
}