iOS之UI高级---Quartz2D基本使用(1)

一:Quartz 2D介绍:

①二维图形绘制引擎,支持iOS环境和Mac OS X环境
②是CoreGraphics框架的一部分,其中的很多数据类型和方法都是CG开头。会经常见到Quartz 2D和CoreGraphics两个术语交互使用
③Quartz与分辨率和设备无关,所以绘制的时候不需要考虑最终绘图的目标和设备。

(2)Quartz内存管理:
①使用含有“Create”或”Copy”的函数创建的对象,使用完后必须释放。(这符合C语言中申请内存,释放内存的原则)

(3)Quartz 2D的坐标系:
①默认的坐标系统:原点(0,0)在左下角。
②iOS的UIKit框架的坐标系中,原点在左上角
所以要进行坐标转换:(请见下文代码示例中的:绘制图形图片)

(4)drawRect和layoutSubViews的对比
setNeedsLayout:异步调用layoutSubViews(布局子视图)
setNeedsDisplay:异步调用drawRect(绘图)

代码示例

①绘制直线:(新建UIView类,实现如下主要方法。至于矩形、圆、贝塞尔曲线的绘制方法大同小异,不一一举例)

绘制方法:
-(void) drawRect:(CGRect)rect {
    //1.直接获取图形上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    [self drawLine:context];
}
//①基本绘制方法
-(void) drawLine:(CGContextRef)context {
    //2.创建图形路径
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, 50, 50); //起点
    CGPathAddLineToPoint(path, NULL, 100, 100); //增加点
    CGPathAddLineToPoint(path, NULL, 50, 100);

    CGPathCloseSubpath(path); //连接首尾点,闭合视图(可选)
    //3.将路径添加到图形上下文
    CGContextAddPath(context, path);
    //4.设置图形属性
    CGContextSetRGBStrokeColor(context, 0, 1, 0, 1);
    CGContextSetRGBFillColor(context, 1, 0, 0, 1);
    CGContextSetLineWidth(context, 3);
    //5.绘制
    CGContextDrawPath(context, kCGPathFillStroke);
    //6.释放路径
    CGPathRelease(path);
}

//②绘制常用方法(简便)
-(void) drawLine2:(CGContextRef) context {
    CGPoint points[] = {{50,50}, {200, 200}, {50, 200}, {50, 50}};
    CGContextAddLines(context, points, 4);

    [[UIColor redColor] setStroke];
    [[UIColor greenColor] setFill];
    CGContextSetLineWidth(context, 3);

    CGContextDrawPath(context, kCGPathFillStroke); 
}

②绘制图片图形

-(void) drawImage:(CGContextRef) context {
    //1.创建UIImage
    UIImage *image = [UIImage imageNamed:@"ali.jpg"];
//    2.坐标转化
//        (1)保存图形上下文,确保绘制的内容不变形
    CGContextSaveGState(context);
//        (2)转换左边系
    //翻转图形
    CGContextScaleCTM(context, 1, -1);
    //把翻转后的图形移回原位
    CGContextTranslateCTM(context, 0, -image.size.height);
//        (3)绘制:UIImage类切记要转换成CG类
    CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage); 
//        (4)恢复context
    CGContextRestoreGState(context);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值