CoreGraphics
来源:互联网 发布:淘宝海蝶hifi音乐会馆 编辑:程序博客网 时间:2024/05/27 09:45
Core Graphics属于媒体层,它负责疾呼所有在IOS屏幕上进行的绘图操作。创建任何界面元素时,iOS都是用Core Graphics来将这些元素绘制到窗口中去的。通过实现和重载Core Graphics的方法,可以创建自定义的界面元素。
6.1 Core Graphics入门
UIKit也依赖于它,#import 的时候会自动引入,而不需#import
Core Graphics与Quartz 2D:
- Quartz 2D是一组二维绘图与渲染API,Core Graphics会使用它们。
- Quartz Core专指Core Animation用到的相关的库、API和类。
有用的相关资料(重要,未链接)Core Graphics概述;Quartz 2D编程指南;Core Animation编程指南
点与像素:坐标系与分辨率的关系,如:retina像素分辨率:960X640 坐标系:480X320。ipad1像素分辨率:1024X768 坐标系:1024X768(非retina屏幕是无法准确绘制像素宽度为1的线的)。
- 图形上下文:在图形上下文之外是无法进行绘图操作的,虽然可以自己创建一个图形上下文,但是这样做的效率很低(非万不得已不要用),正确的使用方法是继承一个UIView的子类,重载其drawRect:方法获得它的上下文UIGraphicsGetCurrentCont
ext()。 - 为什么使用Core Graphics:正确使用,会使应用更快速高效(应用的二进制文件更小),同时自由使用动态高质量图形图像,创建直线、路径、文字、图像````。
6.2 理解Core Graphics
绘制自定义的UIView
图形上下文类似画家的画布,承载绘图动作。绘图动作顺序执行,新动作在前一个动作的基础上完成。
最常见的用法是继承一个UIView的子类,重载其drawRect。视图刷新或者重绘drawRect都会被调用。调用频率很高,所以应该极为轻量级。
从不直接调用drawRect,需要重绘使用setNeedDisplay(作用是让iOS根据它的安排调用drawRect)。
图形上下文的属性是状态相关的,改变属性会影响所有后续操作。
要用到的图形上下文属性:- 路径(path)
- 阴影(shadow)
- 笔画(stroke)
- 剪裁路径(clip path)
- 线条粗细(line width)
- 混合模式(blend mode)
- 填充色(fill color)
- 当前形变矩阵(current transform matrix)
- 线条图案(line dash)
例子:
// CGContextSetShadowWithCo
lor(context, CGSizeMake(5, 5), 0, [UIColor whiteColor].CGColor); [@"hello" drawAtPoint:aPoint withFont:myFont] CGContextSetShadowWithCo lor(context, CGSizeMake(-5, -5), 0, [UIColor whiteColor].CGColor); [@"hello" drawAtPoint:bPoint withFont:myFont] 图形上下文栈
可以将图形上下文的当前状态保存,之后恢复。//1.生成圆角路径,并填充颜色 CGRect myRect = CGRectMake(60, 80, 200, 200); UIBezierPath *roundRect = [UIBezierPath bezierPathWithRoundedRec
t: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.在剪切路径中绘制渐变 CGContextDrawLinearGradi ent(context, [self makeGradient], CGPointMake(0, 80), CGPointMake(0, 320),0); //5.恢复上下文状态,此时剪切罩不存在了 CGContextRestoreGState(context); //6.绘制文字 CGContextSetShadowWithCo lor(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];
6.3 路径、渐变、文字与图像
路径
路径是一系列连起来的点
如果要手工创建路径,只需用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];
渐变
是指从一种颜色到另一种颜色的逐渐变化- 线性渐变:颜色沿着一条定义好了起点和重点的直线方向线性变化。
- 放射渐变:颜色顺着两个圆形之间的方向线性变化,两个圆分别为起始圆和终止圆,都有自己半径圆心。
这个图中起始圆半径为0.圆心向左逐渐移动
文字
图像
如果只是显示图像,使用UIImageView效率更高,在Core Graphics中使用图像目的应该是将其用作自定界面的一部分,或是创建一个图像掩码。
尽管允许混合模式,但是用Core Image效率更高
后续内容
- CoreGraphics
- CoreGraphics
- CoreGraphics
- CoreGraphics
- CoreGraphics入门
- CoreGraphics画图
- CoreGraphics.framework
- CoreGraphics画图
- CoreGraphics--CGPoint
- CoreGraphics--CGSize
- CoreGraphics--CGRect
- CoreGraphics画线
- CoreGraphics详解
- coreGraphics绘图
- coreGraphics框架
- 有关coreGraphics
- CoreGraphics框架
- (CoreGraphics)画图IOS
- 深入浅出学习struts1框架(四):从MVC模式代码认识struts1框架
- HDU 2544 最短路(最短路入门)
- java修改项目名称
- vim java 编辑设置
- 迭代器模式(Iterator)
- CoreGraphics
- 我们爱你是因为你朋友
- 信号量优先级反转及防止反转的天花板和继承策略
- opencv学习笔记--ml 【1】
- POJ 题目1511 Invitation Cards(最短路)
- Fortran_变量(二)
- 深入浅出学习struts1框架(五)--正式进入struts1框架学习,从一个实例开始
- POM文件属性
- Android audio