绘图与动画

绘图与动画.

绘图最主要的还是原理:上下文环境..

几点疑问想要解决??
引擎和框架的区别,什么是引擎.
- 引擎是实现一些具体的功能的,如绘图引擎,是为(CG)框架服务的.

什么是渲染??
计算机中的渲染是什么意思?什么原理?
- 就是把抽象的可视化的东西(物理模型或者数据模型),变成屏幕上可以显示的二维图像.

Bezier曲线?
抛物线么??

做游戏真的需要很好的算法基础吗??

引擎与框架

引擎是实现一些具体的功能的,如绘图引擎,是为框架服务的.

Quartz 2D:二维绘图引擎(纯C语言的API,产生于Core Graphics简称CG框架)

Cosos 2D:2D游戏引擎.

Unity 3D:3D游戏引擎.

iOS绘图中数据类型和函数一般都是以CG前缀开头的.

绘图的三个步骤:

  1. 获取当前上下文(环境).
  2. 绘制路径.
  3. 渲染(显示内容)

注意:在Quarts 2D中画线如果是相连的,就不要写起点了.

pragma mark - 4.绘图的方式

  1. 纯C 语言 (上下文 直接添加路径)
  2. 纯C 语言 (创建路径 再添加进上下文)
  3. C 语言 嵌套(OC 的路径)
  4. C 语言 嵌套(C 的路径 嵌入 OC 的路径)
  5. 纯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的几点疑问:

  1. 为什么绘图的代码都写在drawRect方法中.
    • 首先这个方法非常特别,绘图代码只能写在这里面才能由系统调用起作用.其他地方不生效.且只能第一次调用,如果你想要改变你所绘图形,不能手动调用这个方法了(只能系统调用,可以通过手动[self setNeedDisplay]来调用系统的这个方法.
  2. drawRect方法中的(CGRect)rect参数的作用.
    • rect参数就是代表你的Bounds.你所绘制的范围.
  3. 什么时候调用drawRect方法
    • 在加载View的时候.
  4. 如何重绘.为什么需要重绘.
    • 不重绘无法显示,哪个方法只能生成一次图像,无法改变
  5. 主动调用drawRect方法可以吗?
    • 不可以只能系统调用,手动调用不成功,可以[self setNeedDisplay]间接调用.

绘图练习

  • 三角形(trigon)
  • 矩形(rectangle)
  • 圆形(circle)
  • 椭圆(ellipse/oval)
  • 圆弧(arc)

stroke笔画的意思,fill填充.

绘图的样式

谁渲染谁设置!!!!

  1. 设置线宽
  2. 线头样式(线的一头,连接就变了).
  3. 拐角样式(线连接的地方)
  4. 颜色
  5. 渲染方式
 //线宽 
 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来监听改变的值,传到饼状图中,注意此时因为你的数据是改变的,要调用实时改变绘图的方法.

你可能感兴趣的:(绘图与动画)