绘图与动画.
绘图最主要的还是原理:上下文环境..
几点疑问想要解决??
引擎和框架的区别,什么是引擎.
- 引擎是实现一些具体的功能的,如绘图引擎,是为(CG)框架服务的.
什么是渲染??
计算机中的渲染是什么意思?什么原理?
- 就是把抽象的可视化的东西(物理模型或者数据模型),变成屏幕上可以显示的二维图像.
Bezier曲线?
抛物线么??
做游戏真的需要很好的算法基础吗??
引擎与框架
引擎是实现一些具体的功能的,如绘图引擎,是为框架服务的.
Quartz 2D:二维绘图引擎(纯C语言的API,产生于Core Graphics简称CG框架)
Cosos 2D:2D游戏引擎.
Unity 3D:3D游戏引擎.
iOS绘图中数据类型和函数一般都是以CG前缀开头的.
绘图的三个步骤:
- 获取当前上下文(环境).
- 绘制路径.
- 渲染(显示内容)
注意:在Quarts 2D中画线如果是相连的,就不要写起点了.
pragma mark - 4.绘图的方式
- 纯C 语言 (上下文 直接添加路径)
- 纯C 语言 (创建路径 再添加进上下文)
- C 语言 嵌套(OC 的路径)
- C 语言 嵌套(C 的路径 嵌入 OC 的路径)
- 纯OC
关键语法:
1. CGContextRef ctx = UIGraphicsGetCurrentContext(); //联系上下文环境.
2. CGMutablePathRef path = CGPathCreateMutable(); //创建C路径
//有Creat就要释放:存在于CG,CF框架中.
// CGPathRelease(<#CGPathRef _Nullable path#>)
// CGImageRelease(<#CGImageRef _Nullable image#>)
// CFRelease(<#CFTypeRef cf#>)
3. UIBezierPath *pathOc = [UIBezierPath bezierPathWithCGPath:path]; //创建OC路径对象
4. CGContextAddPath(ctx, path.CGPath); //添加路径
5. 渲染,(path对象调用方法一种,C函数一种)
6. 起始点,movePoint,添加线addLine.都是CG开头,或者对象调用.
pragma mark - 5.drawrect
关于drawRect的几点疑问:
- 为什么绘图的代码都写在drawRect方法中.
- 首先这个方法非常特别,绘图代码只能写在这里面才能由系统调用起作用.其他地方不生效.且只能第一次调用,如果你想要改变你所绘图形,不能手动调用这个方法了(只能系统调用,可以通过手动[self setNeedDisplay]来调用系统的这个方法.
- drawRect方法中的(CGRect)rect参数的作用.
- rect参数就是代表你的Bounds.你所绘制的范围.
- 什么时候调用drawRect方法
- 在加载View的时候.
- 如何重绘.为什么需要重绘.
- 不重绘无法显示,哪个方法只能生成一次图像,无法改变
- 主动调用drawRect方法可以吗?
- 不可以只能系统调用,手动调用不成功,可以[self setNeedDisplay]间接调用.
绘图练习
- 三角形(trigon)
- 矩形(rectangle)
- 圆形(circle)
- 椭圆(ellipse/oval)
- 圆弧(arc)
stroke笔画的意思,fill填充.
绘图的样式
谁渲染谁设置!!!!
- 设置线宽
- 线头样式(线的一头,连接就变了).
- 拐角样式(线连接的地方)
- 颜色
- 渲染方式
//线宽
path.lineWidth = 20;
//线头LineCap
/*
kCGLineCapButt,低点尖角
kCGLineCapRound,圆角
kCGLineCapSquare高点尖角
*/
path.lineCapStyle = kCGLineCapSquare;
//拐角LineJoin
/*
kCGLineJoinMiter,//尖角
kCGLineJoinRound,//圆角
kCGLineJoinBevel,//切斜角
*/
path.lineJoinStyle = kCGLineJoinMiter;
//颜色
[[UIColor redColor] setStroke];
[[UIColor brownColor] setFill];
如果单独只写set,系统是根据系统模式自动判断.
单词意思:butt:斜,round:圆弧,square:直角的,miter:尖角,Bevel:切斜角,cap:帽子,join:连接.
渲染的方式
空心,实心.
9.0 基偶填充规则 【了解】
基数填充,偶数不填充
kCGPathEOFill
10.0 非零绕数填充规则 【了解】
当一个点被从左到右覆盖过标记为1
从右到左覆盖过标记为-1
当标记为0的时候不填充,其他则填充
简单总结,这个规则与方向有关,与次数无关
饼状图
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:starAngle endAngle:endAngle clockwise:YES];
//for循环依次创建扇形.每次改变首尾位置.
//渲染
柱状图
同上只是创建path的方式发生改变,每次的x,y,H改变来改变矩形的形状.
滑块与饼状图
//将UISilder创建拖动事件的方法.sender.value来监听改变的值,传到饼状图中,注意此时因为你的数据是改变的,要调用实时改变绘图的方法.