UIView的两种创建方式
1、通过 storyboard 进行创建
2、通过代码创建 [[UIView alloc] initWithFrame:(CGRect)],可以用 CGRectZero 作为参数
示例:
CGRect rect = CGRectMake(0, 0, 50, 60);
UILabel *label = [[UILabel alloc] initWithFrame:rect];
label.text = @"TEXT";
[self.view addSubview:label];
UIView 的初始化代码
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// 初始化代码
}
return self;
}
设置UIView的透明属性:
通过设置 UIView 的 opaque 属性为 NO,并把背景色设置为 nil 使视图透明。
设置UIView的透明度:
通过设置 UIView 的 alpha 属性来配置视图的透明度。
如果透明度为0则,应该将UIView的 hidden 设置为YES以提高效率。
addSubview:(UIView *) // 添加子视图到当前视图
removeFromSuperview // 从父视图中删除子视图,此方法是由子视图调用,而不是由父视图调用
子视图在父视图subviews数组中的顺序决定了,子视图位置的前后,位置为0的视图在最后面,被其他子视图覆盖
UIWindow
继承自UIView,在一个iOS应用中,只能有一个UIWindow,它包括了当前屏幕上的全部视图,
如果self.view.window不为空则此应用正在显示在屏幕上。
如果需要重绘子视图,则需要重载 drawRect:(CGRect)rect 方法,但用户不可以调用此方法,
需要刷新视图时,调用视图的 setNeedsDisplay 方法,系统会自动调用 drawRect 方法。
使用Core Graphics framework 或者 面向对象的 UIBezierPath 类在drawRect方法中重绘视图。
我们通常使用 UIBezierPath 类进行绘制,因为它可以绘制各种复杂的形状,并做一些其他的,如剪裁等操作。
使用Core Graphics framework绘制图形的步骤:
1、获得设备上下文
2、创建绘制路径
3、设置颜色、字体、线宽等
4、填充路径
而 UIBezierPath 则封装了以上全部的操作,
1、获取设备上下文:
CGContextRef context = UIGraphicsGetCurrentContext();
2、创建路径:
UIBezierPath *path = [[UIBezierPath alloc]init]; // 创建路径
[path moveToPoint:CGPointMake(10, 20)]; // 移动到坐标点
[path addLineToPoint:CGPointMake(30, 40)]; // 添加线段
[path addLineToPoint:CGPointMake(0, 40)]; // 添加线段
[path closePath]; // 闭合路径,添加一条回到起始点的线段
3、设置填充颜色和描边颜色
[[UIColor redColor] setFill];
[[UIColor redColor] setStroke];
4、开始绘制
[path fill]; // 填充路径
[path stroke]; // 绘制路径
压入和取出设备上下文:
在执行绘制操作时,为了保存设备上下文的当前状态,要先保存设备上下文,绘制结束后再还原设备上下文
CGContextSaveGState(CGContextRef c)
// 执行绘制操作
CGContextRestoreGState(CGContextRef c)
绘制文字:
使用带属性字符串的 drawAtPoint:(CGPoint*)p 可以非常方便的绘制出字符串,
参数p是指一个矩形的左上角,这个矩形是带属性字符串的显示范围。
带属性字符串的 size 属性可以获得字符串文本空间的大小。
绘制图像:
使用UIImage绘制图像
View 的坐标系
CGFloat
CGPoint
CGSize
CGRect
原点是左上角,X坐标由左到右依次增加,Y坐标由上到下一次增加。
绘制的单位是点而非像素,因为不同设备的屏幕,像素点有大有小,
可以通过UIView的contentScaleFactor属性可以得到,当前设备的屏幕每点显示像素数