图形处理<1>
2015-09-18 16:00
281 查看
UIView和CALayer的区别:
UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。它本身完全是由CoreAnimation来实现的(Mac下似乎不是这样)。它真正的绘图部分,是由一个叫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
利用
取得当前画板:
开始绘制路径声明:
对画笔进行属性设置:
根据想要的图形进行绘制路径:
让画笔对路径进行描线或填充:
渐进色绘制:
ios中绘制渐进色有两种方案,一种是用CGCradient对象,另一种是CGShading,对于后面这种,可以通过自己写回调函数来设定渐进色的变化规则,因此更加具有主观能动性,当然,用CGGradient则是系统自己会帮你算,相对简单些,这里只介绍CGGradient:
绘图的步骤如下:
创建一个
创建一个CGGradient对象需要的东西有:
1.一个颜色空间,通过
2.颜色数组,位置数组:这两个数组的元素应该对应,不过需要的注意的是,一个颜色其实是有四个浮点数组成的,分别表示rgb值和透明度,范围均为0-1。
3.颜色数组可以这么定义:
对应的位置数组可以这么定义:
代码:
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); //两个点,前一个表示起点,第二个表示终点
相关文章推荐
- IOS多线程GCD
- Android Studio系列教程三--快捷键
- 安装cocoapods时出现could not stat active Xcode path的解决办法
- android include使用[转]
- rsync错误捕获 shell捕获返回码
- 关闭事件冒泡
- java 项目中使用 mongodb的基础方法(转)
- Sublime汉化操作全解
- task_struct结构描述
- iOS9 TableView和ScrollView滚动不响应问题
- SQL数据库常用命令
- HSSFWorkbook And SXSSFWorkbook样式设置
- [MySQL] MySQL存储过程与存储函数
- Android: Custom View和include标签的区别
- asp.net mvc 多文件上传
- iOS9 TableView和ScrollView滚动不响应问题
- 详解Centos 使用YUM安装MariaDB
- 监控 snmpd服务
- 数据结构学习4--树(一)
- objective-c宏定义