View的封装
2015-12-07 22:30
417 查看
自定义View
通常当一个view内部的子控件比较多,我们一般会考虑自定义一个view,在它的内部将子控件的创建屏蔽起来,这样外界就不用关心具体如何实现,只要导入这个类的.h文件使用就好了注意一个控件有2种创建方式:
通过代码创建:
初始化时一定会调用initWithFrame:方法
通过xib\storyboard创建:
初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法
并且在初始化完毕后会调用awakeFromNib方法
在initWithFrame:方法中添加子控件
// 1.初始化子控件 -(instancetype)initWithFrame:(CGRect)frame//通过代码创建View时,init会默认调用initWithFrame方法 { if (self = [super initWithFrame:frame]) { // 1.初始化一个UIImageView对象 UIImageView *iconView = [[UIImageView alloc] init]; [self addSubview:iconView]; self.iconView = iconView; // 2.初始化一个UIlabel对象 UILabel *titleLabel = [[UILabel alloc] init]; titleLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:titleLabel]; self.titleLabel = titleLabel; }return self; }
在layoutSubviews方法中设置子控件的frame(一定要调用super的layoutSubviews)
//2.调整子控件的位置和尺寸 -(void)layoutSubviews { // 1.调用父类的layoutSubviews(重要) [super layoutSubviews]; // 2.取出当前控件的宽度和高度 CGFloat width = self.frame.size.width; CGFloat height = self.frame.size.height; // 3.调整子控件的位置和尺寸 // 3.1.调整iconView的位置和尺寸 self.iconView.frame = CGRectMake(0, 0, width, width); // 3.2.调整titleLabel的位置和尺寸 self.titleLabel.frame = CGRectMake(0, width, width, height - width); }
相关文章推荐
- hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (多重背包)
- Remove Nth Node From End of List
- opencv SVM 训练行人检测器注意事项
- 对SQL授权的认识
- flask表单提交的两种方式
- HDU1069 Monkey and Banana 简单dp
- Python的lambda匿名函数
- 扩展欧几里德问题
- [LeetCode]018-4-Sum
- 随意细解:UI -- 初级数据持久化
- 新能源首页
- 内存管理pbuf.c源码解析——LwIP学习
- COCOS2D-3.9 Value接口分析
- 浅谈java.awt使用过程中遇到的问题
- HTTP Referer
- 【Android学习】真机获取SD卡遇到的问题
- 继续学习
- 51nod 1463:找朋友 线段树
- html5跟随鼠标炫酷网站引导页动画特效
- jquery-2.1.4 源码解读(1):jquery架构