画阴影:
---------------------------------------------------------------------------------------------------
Paths1. 向量绘制,用路径来描述图形,可以是闭合也可以不是闭合。
CGContextRef ctx = UIGraphicsGetCurrentCont
CGContextRef ctx
= [[NSGraphicsContext currentContext] graphicsPort];
CGMutablePathRef path = CGPathCreateMutable();
2. Building Blocks:
- 点: CGContextMoveToPoint
- 线: CGContextAddLineToPoint, CGContextAddLines
- 圆弧:CGContextAddArc,CGContextAddArcToPoint
- 曲线:Quadratic/Cubic Bezier曲线, CGContextAddCurveToPoint
- CGContextClosePath会被某些操作默认执行。
- 椭圆:CGContextAddEllipseInRec
- 矩形: CGContextAddRect;
3. 创建Path CGContextBeginPath + CGContextMoveToPoint
4. Painting Path != Create Path
5. Mutable Path: Path对象,独立于Context存在。CGContextAddPath来使用它。
- CGPathCreateMutable = CGContextBeginPath
- CGPathMoveToPoint = CGContextMoveToPoint
- CGPathAddLineToPoint = CGContextAddLineToPoint
- CGPathAddCurveToPoint = CGContextAddCurveToPoint
- CGPathAddEllipseInRect = CGContextAddEllipseInRec
- CGPathAddArc = CGContextAddArc
- CGPathAddRect = CGContextAddRect
- CGPathCloseSubPath = CGContextCloseSubPath
6. 描边
- 线宽:
- 连接方式:Miter尖角,Round圆角,Bevel平角
- 线头:Butt平头,Round圆头,Projecting扩展平头
- 角限:限制尖角连接的范围
- 点划模板:
- 颜色空间:
- 颜色:
- StrokePattern?
CGContextStrokePath/CGContextStrokeRect/CGContextStrokeRectWithW
7.填充规则:
- nonzero winding:CGContextFillPath从某点出发向图形边缘做一条射线,如果射线和图形某条边相交,且该边从坐向右穿过射线,则相交计数+1,如果该边从右向左穿过射线,则相交计数-1。如果最后相交计数为1,则该点在图形内。
- even odd:CGContextEOFillPath从某点出发向图形边缘做一条射线,如果射线和图形边相交点数为奇数,则该点在图形内。
8. CGContextFillPath/CGContextEOFillPath/CGContextFillRect/CGContextFillRects/CGContextFillEllipseInRe
9. 混合:CGContextSetBlendMode - GraphicsState, 通常:
- Normal: result
- Multiply: result = fore*back;
- Screen: result = 1.0-(1.0-fore)*(1.0-back);
- Overlay: result = gray(back)>0.5?(1.0-2.0*(1.0-back)*(1.0-fore):fore*back*2.0f;
- Darken: result = min(fore,back);
- Lighten: result = max(fore,back);
- Color Dodge: result = back/(1.0-fore);
- Color Burn: result = 1.0 - (1.0-back)/fore;
- Soft Light: result = gray(fore)>0.5? 1.0 - (1.0-back)*(1.5 - fore):back*(fore+0.5);
- Hard Light: result = gray(fore)>0.5?1.0 - 2.0*(1.0-back)*(1.0-fore):2.0*back*fore;
- Difference: result = abs(fore-back);
- Exclusion: result = 0.5 - 2.0*(fore - 0.5)*(back-0.5);
- Hue: result = lum(back), sat(back),hue(fore);
- Saturtation: result = lum(back),sat(fore),hue(back);
- Color: result = lum(back),sat(fore),hue(fore);
- Luminosity: result = lum(fore),sat(back),hue(back);
10.裁剪: CGConextClip/CGContextEOClip/CGContextClipToRect/CGContextClipToRects/CGContextClipToMask;
---------------------------------------------------------------------------------------------------
IOS中的图形和绘制1、iOS支持OpenGL ES和Quartz/UIKit/CoreAnimation绘制接口。UIKit绘制必须在主线程中完成。
2、Quartz支持基于路径的绘制,反走样,填充,图像,上色,坐标变换,pdf绘制显示解析等功能。
3、UIKit支持线条绘制、图像和颜色操作。
4、Core Animation支持动画绘制。
5、View的使用DrawRect绘制,以下行为会触发:
- View的移动和遮挡。
- View的隐藏和显示。
- 拖动View。
- 显示调用setNeedDisplay和setNeedDispalyRect
6、UIKit左上角为原点,右下角为终点。CoreAnimation坐下角为原点,右上角为终点。使用CGContextRotateCTM、 CGContextScaleCTM、CGContextTranslateCTM来变换矩阵,或者直接使用CGAffineTransform设置变换 矩阵。
7、CGContext绘制上下文,对于Bitmap和PDF,可以创建不同的context类型。
- 变换矩阵
- 裁剪范围
- 线条绘制属性
- 曲线精度
- 反走样
- 填充属性,描边属性
- 半透明属性
- 颜色空间
- 文字
- 颜色混合模式
8、使用UIGraphicsGetCurrentCont
9、UIGraphicsBeginImageCont
10、Path绘制,即向量绘制。推荐使用UIBezierPath,其次是CGPath。
11、翻转屏幕变换:
CGContextTranslateCTM(graphicsContext, 0.0, drawingRect.size.height); |
CGContextScaleCTM(graphicsContext, 1.0, -1.0); |
12、Point通常等于Pixel,但是可以指定一个Point对应多个Pixel。
13、使用UIColor坐颜色空间变换。
14、绘制性能:
- 最小化绘制调用
- 尽量使用不透明的View
- 在卷屏时重用View和表格
- 在卷屏时可以不清空上次绘制结果
- 减少绘制状态切换。
---------------------------------------------------------------------------------------------------
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/e0bde96986aef17c8b012fa4652e1556.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/316f8959770d1858f79b4ffe4b9b6fee.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/8dcdd4ad827fadc58f2026ae5b4fd639.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/984eb1614fadf59dbdb1e143aad8c1c3.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/3cbac61a9a52d7b3572e7109a46a9980.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/aee757b71f37ceb2ee32b36a34432e5b.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/8e7c06792b1b4e48def94b6b736077ed.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/d4a3fa6620395c14d49bee73233e5715.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/d25738b2691bd6172ed5c5e9c22a1ec6.gif)
![Paths - happy dog - 又一个部落格 Paths - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/dc1c42b415a99d662ca0fe12eae72224.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/8c48806573097f2911fcd3b198a5e092.gif)
| Description |
| |
| |
| |
| |
| |
| |
Setting Blend Modes
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/f7b66f577c968e38c8d2960e65562e6e.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/ce03ac094f3d1559c9b7e6870ed01eb4.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/58e430b87c58e7b6552aa333e5391f7c.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/a3a475ab1076cd9730d3c7115a228d35.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/186ad747d4d4f3e46951075ba766143d.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/58ba6ba426d6d8417ab0c1186ca2c546.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/31f9ff4ef459b16613dca71bb098b312.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/932d91e7140c36becfcb1b9c6ab79c54.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/6dcd030aeb5cc78e3ac08cacb8553dcb.jpeg)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/bf2e45826c3951e21928b6c005d0c52a.jpeg)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/19e037e64118ba5cbe214a924f7b0257.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/9a3be9dc3612cb60200288ec0b1a9559.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/f9f0ca786e831210ee492df81d3c0666.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/752859300748d8a1e2895bc8f4285c3c.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/4222ae4f41da367648dfb436d9bf38ed.gif)
![Paths(待续) - happy dog - 又一个部落格 Paths(待续) - happy dog - 又一个部落格](https://i-blog.csdnimg.cn/blog_migrate/4147f1ce025e480d773a74bde7e2152b.gif)
CGContextBeginPath (context); |
CGContextAddArc (context, w/2, h/2, ((w>h) ? h : w)/2, 0, 2*PI, 0); |
CGContextClosePath (context); |
CGContextClip (context); |
Function | Description |
---|---|
| |
使用奇偶规则剪辑当前上下文 | |
设置一个矩形区域和当前的剪辑区域的交集 | |
设置一些矩形区域和当前剪辑区域的交集 | |
Maps a mask into the specified rectangle and intersects it with the current clipping area of the graphics context. Any subsequent path drawing you perform to the graphics context is clipped. (See |