UIKit 视图 UIView

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属性可以得到,当前设备的屏幕每点显示像素数








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值