大家对于UIViewController的生命周期都相当了解了。但是对于继承UIView的子类能做什么,却很少有文章介绍的。

1.  -initWithFrame:(CGRect)rect是view指定的初始化方法。如果要继承UIView 的初始化就需要直接或间接的调用这个方法。

具体使用如下:

- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        [self createUI];
    }
    return self;

}

注意到在初始化中,做了一些额外的事情 [self createUI];

2. 当你需要调用-(void)layoutSubViews:来布局子视图。一般视图需要重绘时需要会调用layoutSubViews.

layoutSubView都是什么时候会被调用:

• init 时,并不会调用layoutSubviews

• [A addSubView:B]会导致A 和B 以及其所有的subviews的layoutSubviews被调用。

•  view 的setFrame会智能的调用layoutSubviews。会先判断view 的frame是否发生改变,如果改变了就调用layoutSubViews,否则将不会调用。

• scrolling a UIScrollView causes layoutSubviews to be called on the scrollView, and its superview  滚动一个UIScrollView会导致在scrollView和它之上的superView的layoutSubViews会被调用。

• 旋转一个设备仅仅会调用viewController对应的父 view 上会调用layoutSubView

• Resizing a view will call layoutSubviews on its superview

重新调整一个view的时候会调用它的superview的layoutSubViews方法

 

- (void)layoutSubviews{

    [super layoutSubviews];

// 背景
    [_backImageView setFrame:self.bounds];

    CGRect rectTitle = CGRectMake(0, 0, self.width, _titleLabel.font.pointSize);

    [_titleLabel setFrame:rectTitle];
    [_textLabel setFrame:rectText];

}

 

注意一定要调用[super layoutSubViews]方法。

3.  - (void)drawRect:(CGRect)rect 用传递给的Rect给接受者
绘制图片

用在哪里:  如果执行平常的绘图操作,就需要用到这个方法。

 

  1. // Only override drawRect: if you perform custom drawing.  
  2. // An empty implementation adversely affects performance during animation.  
  3. - (void)drawRect:(CGRect)rect  
  4. {  
  5.     UIColor *color = [UIColor redColor];  
  6.     [color set]; //设置线条颜色  
  7.       //创建
  8.     UIBezierPath* aPath = [UIBezierPath bezierPath];
  9. //线的属性 设置 
  10.     aPath.lineWidth = 5.0;  
  11.     aPath.lineCapStyle = kCGLineCapRound; //线条拐角  
  12.     aPath.lineJoinStyle = kCGLineCapRound; //终点处理  
  13.       
     
  14.     // Set the starting point of the shape.  
  15.     [aPath moveToPoint:CGPointMake(100.0, 0.0)];  
  16.       
     
  17.     // Draw the lines  
  18.     [aPath addLineToPoint:CGPointMake(200.0, 40.0)];  
  19.     [aPath addLineToPoint:CGPointMake(160, 140)];  
  20.     [aPath addLineToPoint:CGPointMake(40.0, 140)];  
  21.     [aPath addLineToPoint:CGPointMake(0.0, 40.0)];  
  22.     [aPath closePath];//第五条线通过调用closePath方法得到的  
  23.       
     
  24.     [aPath stroke];//Draws line 根据坐标点连线  

何时会被调用:

     当显式的调用[self setNeedDisplay]时会在下个event loop 被调用。或在viewController里调用[self.view setNeedDisplay]也可以。

4. 在重写tabelView cell 时会用到 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 。

使用方法如下:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

        //进行额外的操作

        [self creatUI];
    }
    return self;

}

当然操作的时候要注意尽量在cell 的content view上进行操作。

在tableview cell 里也可以调用UIView指定的初始化方法。

 

 

 

继承UIView的初始化 、重绘、以及绘制图片的更多相关文章

  1. 关于UIView及其子类重绘drawRect

    转载自:https://nezha.gitbooks.io/ios-developmentarticles/content/UIView%E7%9A%84drawRect%E9%87%8D%E7%BB ...

  2. iOS之 重绘机制

    最近在看Core Animation , 今天来谈谈CALayer 和 UIView 中的重绘的一些认识: 我们都知道UIView里面有个成员layer,利用这个这个layer我们可以设置一些圆角,阴 ...

  3. swing容器继承重绘问题解决

    swing容器继承重绘问题解决   以JPanel为例,继承JPanel,想动态为器更换背景,这就涉及到重绘问题.一下是本人重写代码: package ui; import java.awt.Grap ...

  4. 关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)

    最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结. 效果图: 1.基础配置 options的配置如下: { tooltip: { trigger: 'item', triggerO ...

  5. 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)

    核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...

  6. iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)

    我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import " ...

  7. iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. 重绘TabControl

    本文转载自:http://blog.csdn.net/conmajia/article/details/7596718 作者:野比 (conmajia@gmail.com) 时间:May, 2012 ...

  9. UITextField的常用属性,Delegate,重绘

        一  属性 UITextField * myTextField = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 200, 50 ...

随机推荐

  1. 各个国家 不同字符集的unicode 编码范围

    原文地址:http://blog.csdn.NET/xzl04/article/details/6307416 0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic  ...

  2. 关于layer.open() 弹框的使用

    在用 layer.open() 追加渲染HTML的时候,完全看不到效果,皆因layui框架需要在最后用 form.render() 方法来渲染表单才可以看到效果,写法如下: <script> ...

  3. AspNetPager样式以及属性帮助文档

    帮助文档地址:http://www.webdiyer.com/AspNetPagerDocs/index.html 应用样式:http://www.webdiyer.com/AspNetPagerDe ...

  4. Android开发---开发文档翻译

    2014.11.24 1:ClipData类:用于表示剪切的数据,此剪切的数据可以是复杂类型,包括一个或多个条目实例 (1)基础知识 >公共类:public class >嵌套类:Clip ...

  5. CF-799A

    A. Carrot Cakes time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  6. Volley Cache机制分析

    1.http缓存机制 要弄明白volley缓存机制,那么肯定是和浏览器的缓存机制有关了,简单来说volley整套框架要做的事都是模拟浏览器来进行一次次的http交互 1.1.概述 http缓存的是指当 ...

  7. many-to-one 配置问题

    需要引入org.hibernate.annotations.NotFound,当预期的被关联的元素不在数据库(关乎关联列的错误id)时,致使Hibernate无法解决关联性问题时,Hibernate就 ...

  8. roguelike地图的随机生成算法

    如果要想自己设计一个roguelike游戏,那么需要你有一个随机地图生成,我在indienova上看到一篇文章,描述了一个roguelike算法,然后自己用unity实现了一个下. 原文地址:随机生成 ...

  9. HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质

    小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...

  10. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...