美文网首页
代码自定义UIView

代码自定义UIView

作者: iOS_Developer | 来源:发表于2016-09-08 14:35 被阅读34次

当一撮样式一样的视图在工程中被多次使用的时候,为了方便使用,我们会想把他们抽成一个单独的类,进行视图的自定义.
比如我们要做一个这样的东西:


beauty.png

beauty.png

这一块由两个东西组成:一个imageView和一个label。首先我们新建一个继承自UIView的类MyView.
在MyView的.m文件里,你可以根据自己的意愿将两个子控件设置成MyView的属性或者成员变量,这里我们设置为属性。

@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UILabel *label;

那接下来,就是要向自定义的view里面添加控件咯。
通常的思路是重写UIView的构造方法。那么这里要说第一个注意了:

1.要重写UIView的initWithFrame:方法而不是init方法

为什么呢?因为当外部调用init的方法的时候,其内部也会默默地调用initWithFrame:方法,你不能保证别的同事在调用你的类的时候不会直接调用initWithFrame:方法,这时如果你仅重写了init方法,那么两个子控件便无从创建.

于是我们写成这样:

- (instancetype)initWithFrame:(CGRect)frame {
 if (self = [super initWithFrame:frame])
 { 
/* 添加子控件的代码*/ 
 } 
return self;
 }

2.在layoutSubViews方法里面布局子控件

如下:

- (void)layoutSubviews { 
// 一定要调用super的方法 
[super layoutSubviews]; 
// 确定子控件的frame(这里得到的self的frame/bounds才是准确的) 
CGFloat width = self.bounds.size.width; 
CGFloat height = self.bounds.size.height; 
self.imageView.frame = CGRectMake(0, 0, width, width); 
self.label.frame = CGRectMake(0, width, width, height - width);
}

参考:http://www.jianshu.com/p/68b383b129f9

相关文章

网友评论

      本文标题:代码自定义UIView

      本文链接:https://www.haomeiwen.com/subject/pzvsettx.html