码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发总结(A0) - 自定义UIView

时间:2015-07-01 20:16:28      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

根据我浅薄的ios开发经验,可以有以下方法添加custom uiview 的内容

1)draw

2)build in xib

3)add subviews

在custom uiview 的m文件中,一般按照以下对uiview进行初始设置:

 1 -(void)awakeFromNib{
 2     [self setup];
 3 }
 4 -(void)setup{
 5 //set up view  
 6 }
 7 -(instancetype)initWithFrame:(CGRect)frame{
 8     self=[super initWithFrame:frame];
 9     if (self) {
10         [self setup];
11     }
12     return self;
13 }

setup 中一般要做的事情有:

- setBackgroundColor:

- setContentMode:

- setOpaque: (尽量设置为 yes)

- setTranslatesAutoresizingMaskIntoConstraints: (如果使用autolayout,设置为no,否则可能constraint可能会冲突)

 

 

以下说明这三种方式的基本做法

一、draw

重写uiview 的

-(void)drawRect:(CGRect)rect{}

方法,在该方法中画uiview 的内容。

-可以用UIBezierPath画;

- 可以用CGContext 各种画图函数;

- 可以用uikit中各种控件自带的draw方法画

(如UIImage 的drawInRect:, NSAttributedString的drawInRect:)

- 当设置custom view 内容,位置相关的properties时,调用[self setNeedDisplay],系统会适时绘制

 

问题:drawRect:方法中能否使用 addSubview 方法? 

我的理解:最好不要使用,因为可能每次draw都要add subview,

 

问题:如何添加UIButton ?

我的理解:在setup中用addsubview 的方式添加button(不要设置frame,此时view的geometry未确定),用NSLayoutContraint 约束button 的位置,或者在drawInRect:中设置button的frame

 

问题:如何接受用户的touch/ gesture

我的理解:在setup 中添加gesture,或者重写以下方法处理用户交互

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{}

 

注意:drawInRect:是在main queue 中进行的,如果drawInRect:很复杂,或者需要绘制很多view, app 可能会卡。

对于这种情况,考虑concurrently build interface(参考wwdc视频,后续有随笔专门总结如何实现)

 

用draw 的方法添加view内容,代码复杂,但可以做到真正的customization

 

二、load from nib

1)新建view nib 文件,在ib中拖拽添加view的内容(注意view 的class 为custom view 的class),并设置constraint(如何设置constraint,将另有随笔总结)。

2)可用以下语句直接创建view

[[[NSBundle mainBundle]loadNibNamed:@"xib file name "
                                  owner:nil
                                options:nil] lastObject];

 

好处(前提是熟悉ib):

1.方便快速的添加内容、设置iboutlet 和ibaction、添加gesture等

2.便于 localization

3.便于设置constraint

 

三、add subviews

这种方法比较直接,在setup中增加subviews 就可以了(这里不适合设置frame等geometry信息),

但好像运行效率比较低

 

iOS开发总结(A0) - 自定义UIView

标签:

原文地址:http://www.cnblogs.com/beddup/p/4613853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!