Core Graphics

来源:互联网 发布:java post请求php接口 编辑:程序博客网 时间:2024/05/16 12:01

Core Graphics属于媒体层,它负责疾呼所有在IOS屏幕上进行的绘图操作。创建任何界面元素时,iOS都是用Core Graphics来将这些元素绘制到窗口中去的。通过实现和重载Core Graphics的方法,可以创建自定义的界面元素。

6.1 Core Graphics入门


UIKit也依赖于它,#import 的时候会自动引入,而不需#import

  1. Core Graphics与Quartz 2D:

    • Quartz 2D是一组二维绘图与渲染API,Core Graphics会使用它们。
    • Quartz Core专指Core Animation用到的相关的库、API和类。 
      有用的相关资料(重要,未链接)Core Graphics概述;Quartz 2D编程指南;Core Animation编程指南
  2. 点与像素:坐标系与分辨率的关系,如:retina像素分辨率:960X640 坐标系:480X320。ipad1像素分辨率:1024X768 坐标系:1024X768(非retina屏幕是无法准确绘制像素宽度为1的线的)。

  3. 图形上下文:在图形上下文之外是无法进行绘图操作的,虽然可以自己创建一个图形上下文,但是这样做的效率很低(非万不得已不要用),正确的使用方法是继承一个UIView的子类,重载其drawRect:方法获得它的上下文UIGraphicsGetCurrentContext()。
  4. 为什么使用Core Graphics:正确使用,会使应用更快速高效(应用的二进制文件更小),同时自由使用动态高质量图形图像,创建直线、路径、文字、图像````。


6.2 理解Core Graphics

  1. 绘制自定义的UIView
    图形上下文类似画家的画布,承载绘图动作。绘图动作顺序执行,新动作在前一个动作的基础上完成。
    最常见的用法是继承一个UIView的子类,重载其drawRect。视图刷新或者重绘drawRect都会被调用。调用频率很高,所以应该极为轻量级。
    从不直接调用drawRect,需要重绘使用setNeedDisplay(作用是让iOS根据它的安排调用drawRect)。
    图形上下文的属性是状态相关的,改变属性会影响所有后续操作。
    要用到的图形上下文属性:

    • 路径(path)
    • 阴影(shadow)
    • 笔画(stroke)
    • 剪裁路径(clip path)
    • 线条粗细(line width)
    • 混合模式(blend mode)
    • 填充色(fill color)
    • 当前形变矩阵(current transform matrix)
    • 线条图案(line dash)

    例子:

     // CGContextSetShadowWithColor(context, CGSizeMake(5, 5), 0, [UIColor   whiteColor].CGColor); [@"hello" drawAtPoint:aPoint withFont:myFont] CGContextSetShadowWithColor(context, CGSizeMake(-5, -5), 0, [UIColor    whiteColor].CGColor); [@"hello" drawAtPoint:bPoint withFont:myFont]

    img

  2. 图形上下文栈
    可以将图形上下文的当前状态保存,之后恢复。

     //1.生成圆角路径,并填充颜色 CGRect myRect = CGRectMake(60, 80, 200, 200); UIBezierPath *roundRect = [UIBezierPath bezierPathWithRoundedRect:myRect                                                  cornerRadius:30]; CGContextSetRGBFillColor(context, 222.0f/255.0f, 169.0f/222.0f, 269.0f/255.0f, 1); CGContextSetShadow(context, CGSizeMake(0, 5), 10); [roundRect fill]; //2.保存当前状态 CGContextSaveGState(context); //3.用圆角路径剪切上下文,下面的渐变会被限制在这个剪切路径中 [roundRect addClip]; //4.在剪切路径中绘制渐变 CGContextDrawLinearGradient(context, [self makeGradient], CGPointMake(0, 80), CGPointMake(0, 320),0); //5.恢复上下文状态,此时剪切罩不存在了 CGContextRestoreGState(context); //6.绘制文字 CGContextSetShadowWithColor(context, CGSizeMake(0, -1), 0, [UIColor whiteColor].CGColor); CGContextSetRGBFillColor(context, 0, 0, 0, 1); [@"iOS 5 Core Frameworks" drawInRect:CGRectMake(0, 120, 320, 200) withFont:myFont lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];

    img


6.3 路径、渐变、文字与图像

  1. 路径
    路径是一系列连起来的点
    如果要手工创建路径,只需用moveToPoint和addLineToPoint,按照期望的路径走一圈。

     //1.新建路径,添加线 UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(160, 20)]; [path addLineToPoint:CGPointMake(260, 340)]; //2.添加半圆路径,注意设置顺时针 [path addArcWithCenter:CGPointMake(160, 340)                  radius:100              startAngle:0               endAngle:M_PI              clockwise:YES]; //3.将路径封闭,会连接当前路径中的第一个和最后一个点。 [path closePath]; [path fill]; 

    img img

  2. 渐变
    是指从一种颜色到另一种颜色的逐渐变化

    • 线性渐变:颜色沿着一条定义好了起点和重点的直线方向线性变化。
    • 放射渐变:颜色顺着两个圆形之间的方向线性变化,两个圆分别为起始圆和终止圆,都有自己半径圆心。

    这个图中起始圆半径为0.圆心向左逐渐移动 
    img

  3. 文字
    img

  4. 图像
    如果只是显示图像,使用UIImageView效率更高,在Core Graphics中使用图像目的应该是将其用作自定界面的一部分,或是创建一个图像掩码。
    尽管允许混合模式,但是用Core Image效率更高 img


后续内容 


0 0
原创粉丝点击