继承UIView的初始化 、重绘、以及绘制图片
大家对于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给接受者
				绘制图片
用在哪里: 如果执行平常的绘图操作,就需要用到这个方法。
- // Only override drawRect: if you perform custom drawing.
 - // An empty implementation adversely affects performance during animation.
 - - (void)drawRect:(CGRect)rect
 - {
 - UIColor *color = [UIColor redColor];
 - [color set]; //设置线条颜色
 - //创建
 - UIBezierPath* aPath = [UIBezierPath bezierPath];
 - //线的属性 设置
 - aPath.lineWidth = 5.0;
 - aPath.lineCapStyle = kCGLineCapRound; //线条拐角
 - aPath.lineJoinStyle = kCGLineCapRound; //终点处理
 
- // Set the starting point of the shape.
 - [aPath moveToPoint:CGPointMake(100.0, 0.0)];
 
- // Draw the lines
 - [aPath addLineToPoint:CGPointMake(200.0, 40.0)];
 - [aPath addLineToPoint:CGPointMake(160, 140)];
 - [aPath addLineToPoint:CGPointMake(40.0, 140)];
 - [aPath addLineToPoint:CGPointMake(0.0, 40.0)];
 - [aPath closePath];//第五条线通过调用closePath方法得到的
 
- [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的初始化 、重绘、以及绘制图片的更多相关文章
- 关于UIView及其子类重绘drawRect
		
转载自:https://nezha.gitbooks.io/ios-developmentarticles/content/UIView%E7%9A%84drawRect%E9%87%8D%E7%BB ...
 - iOS之 重绘机制
		
最近在看Core Animation , 今天来谈谈CALayer 和 UIView 中的重绘的一些认识: 我们都知道UIView里面有个成员layer,利用这个这个layer我们可以设置一些圆角,阴 ...
 - swing容器继承重绘问题解决
		
swing容器继承重绘问题解决 以JPanel为例,继承JPanel,想动态为器更换背景,这就涉及到重绘问题.一下是本人重写代码: package ui; import java.awt.Grap ...
 - 关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)
		
最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结. 效果图: 1.基础配置 options的配置如下: { tooltip: { trigger: 'item', triggerO ...
 - 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)
		
核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...
 - iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)
		
我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import " ...
 - iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条
		
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
 - 重绘TabControl
		
本文转载自:http://blog.csdn.net/conmajia/article/details/7596718 作者:野比 (conmajia@gmail.com) 时间:May, 2012 ...
 - UITextField的常用属性,Delegate,重绘
		
一 属性 UITextField * myTextField = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 200, 50 ...
 
随机推荐
- pcieport 0000:00:1c.5: PCIe Bus Error
			
进入Linux系统 root身份 编辑/etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet" 将quiet改为 pci=nomsi ...
 - 洛谷1087 FBI树 解题报告
			
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
 - ASP.NET中MessageBox的实现
			
asp.net中没有MessageBox这个控件,固然可以插入Winform里的MessageBox,但一般不提倡,所以只能变通实现,主要有这几种方法: 1.直接利用javascript的alert和 ...
 - Spring Boot 学习系列(08)—自定义servlet、filter及listener
			
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和li ...
 - bat 批处理之提取带有关键字的整行数据
			
用于在log中检索出insert sql语句,主要用于数据恢复 前言: a.txt 里面存放的是 需要查找的关键字 b.bat limian 存放的是执行程序 生成的文件存放在 c.txt(自动创建) ...
 - 使用js在html文档的任意位置输出内容
			
<script type="text/javascript">document.write('这里是内容');</script>
 - 解决overflow: auto在Ios中滑动不流畅
			
[bug]—— H5页面在 ios 端滑动不流畅的问题 IOS系统的惯性滑动效果非常6,但是当我们对div加overflow-y:auto;后是不会出这个效果的,滑动的时候会感觉很生涩.怎么办? ...
 - Educational Codeforces Round 20 C(math)
			
題目鏈接: http://codeforces.com/problemset/problem/803/C 題意: 給出兩個數n, k, 將n拆分成k個數的和,要求這k個數是嚴格遞增的,並且這k個數的g ...
 - [Xcode 实际操作]九、实用进阶-(15)屏幕截屏:截取当前屏幕上的显示内容
			
目录:[Swift]Xcode实际操作 本文将演示如何截取屏幕画面,并将截取图片,存入系统相册. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UI ...
 - 【OpenJ_Bailian - 4137】最小新整数 (贪心)
			
最小新整数 Descriptions: 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m.现在从m位中删除k位(0<k < ...