您的位置:首页 > 其它

图形处理<1>

2015-09-18 16:00 281 查看
UIView和CALayer的区别:

UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。它本身完全是由CoreAnimation来实现的(Mac下似乎不是这样)。它真正的绘图部分,是由一个叫CALayer(
Core Animation Layer
)的类来管理。UIView本身,更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。

Quart 2D 是一组二位绘图和渲染API,Core Graphic会使用到这组API

Quartz Core 专指Core Animation用到的动画相关的库、API和类

图形上下文

Core Graphics 使用图形上下文进行工作,这个上下文的作用像画家的画布一样。在图形上下文之外是无法绘图的,我们可以自己创建一个上下文,但是性能和内存的使用上,效率是非常低得。

我们可以通过派生一个UIView的子类,获得它的上下文。在UIView中调用drawRect:方法时,会自动准备好一个图形上下文,可以通过调用UIGraphicsGetCurrentContext()来获取。 因为它是运行期间绘制图片,我们可以动态的做一些额外的操作。

需要知道的术语:

路径 path

阴影 shadow

笔画 stroke

剪裁路径 Clip Path

线条粗细 Line Width

混合模式 Blend Mode

填充色 Fill Colo

当前形变矩阵 Current Transform Matrix

线条图案 Line Dash

利用
Core Graphics
绘图步骤:

取得当前画板:

CGContextRef context=UIGraphicsGetCurrentContext()


开始绘制路径声明:

CGContextBeginPath(context);


对画笔进行属性设置:

- CGContextSetShadowWithColor 设置阴影
- CGContextSetAlaha 透明度
- CGContextSetRGBFillColor 填充颜色
- CGContextSetRGBStrokeColor 画笔颜色设置
- CGContextSetFillColorSpace 颜色空间填充
- CGConextSetStrokeColorSpace 颜色空间画笔设置
- CGContextFillRect 补充当前填充颜色的rect


根据想要的图形进行绘制路径:

//由点生成线
CGContextMoveToPoint(context,0,0);
CGContextAddLineToPoint(context,100,100);

//系统预先提供的形状路径
CGContext**Add**EllipseInRect 画一椭圆


让画笔对路径进行描线或填充:

CGContextStrokePath(context);//对路径描线
CGContextFillPath(context);//对路径区域填充


渐进色绘制:

ios中绘制渐进色有两种方案,一种是用CGCradient对象,另一种是CGShading,对于后面这种,可以通过自己写回调函数来设定渐进色的变化规则,因此更加具有主观能动性,当然,用CGGradient则是系统自己会帮你算,相对简单些,这里只介绍CGGradient:

绘图的步骤如下:

创建一个
CGGradient
对象,这个对象里存放的是关于绘制渐进色的一些信息,包括颜色以及位置等等

创建一个CGGradient对象需要的东西有:

1.一个颜色空间,通过
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
得到。

2.颜色数组,位置数组:这两个数组的元素应该对应,不过需要的注意的是,一个颜色其实是有四个浮点数组成的,分别表示rgb值和透明度,范围均为0-1。

3.颜色数组可以这么定义:

CGFloat components[] = {

1,1,1,1,

0,0,0,1,

1,1,1,1};


对应的位置数组可以这么定义:

CGFloat locations[] = {0.0,0.5,1.0};


代码:

CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB(); //得到颜色空间
CGGradientRef myGradient;
int location_num = 3;
CGFloat components[] = {1,1,1,1,
0,0,0,1,
1,1,1,1};
CGFloat locations[] = {0.0,0.5,1.0};
myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, location_num);
CGContextDrawLinearGradient(context, myGradient, CGPointMake(0, 0),CGPointMake(100, 100), 0); //两个点,前一个表示起点,第二个表示终点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: