本文主要是介绍第三十四篇:Quartz2D绘图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Quartz2D在iOS开发中的价值
2.图形上下文
(输出目标可以是PDF文件、Bitmap或者显示器的窗口上)
自定义view
3)
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextMoveToPoint(ctx,10,10);
CGContextAddLineToPoint(ctx,100,100);
CGContextStrokePath(ctx);//CGContextFillPath(ctx);
// 图形上下文全部内容重绘
- (void)setNeedsDisplay;// 图形上下文柜形框内的内容重绘
- (void)setNeedsDisplayInRect:(CGRect);
UIGraphicsGetCurrentContext()
用图形上下文栈,存储当前图形上下方及其复原
CGContextSaveGState(CGContextRef _Nullable c)
CGContextRestoreGState(CGContextRef _Nullable c)
图形上下文的 旋转,缩放,平移
// 图形上下文中的内容旋转了angle角度CGContextRotateCTM(CGContextRef _Nullable c, CGFloat angle)// 图形上下文中的内容缩放比例CGContextScaleCTM(CGContextRef _Nullable c, CGFloat sx, CGFloat sy)// 图形上下文中的内容x,y的平移CGContextTranslateCTM(CGContextRef _Nullable c, CGFloat tx, CGFloat ty)
指定一个点成为current point,Quartz会跟踪current point一般执行完一个相关函数后,current point都会相应的改变.
void CGContextMoveToPoint (CGContextRef c, CGFloat x,CGFloat y );
创建一条直线,从current point到 (x,y), 然后current point会变成(x,y)
void CGContextAddLineToPoint ( CGContextRef c, CGFloat x, CGFloat y );
创建多条直线,比如points有两个点,那么会画两条直线 从current point到 (x1,y1), 然后是(x1,y1)到(x2,y2),然后current point会变成points中的最后一个点
void CGContextAddLines ( CGContextRef c, const CGPoint points[], size_t count
);
形成封闭图形
CGContextClosePath(CGContextRef _Nullable c)
设置线宽状态:
CGContextSetLineWidth(CGContextRef _Nullable c, CGFloat width);
设置线两端的形状
CGContextSetLineCap(CGContextRef _Nullable c, CGLineCap cap)
设置填充的颜色
CGContextSetRGBFillColor(CGContextRef _Nullable c, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha)
CGContextSetRGBStrokeColor(CGContextRef _Nullable c, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha)
裁剪图形
CGContextClip(CGContextRef _Nullable c)
CGContextClipToMask(CGContextRef _Nullable c, CGRect rect, CGImageRef _Nullable mask)
CGContextClipToRect(CGContextRef _Nullable c, CGRect rect)
CGContextClipToRects(CGContextRef _Nullable c, const CGRect * _Nonnull rects, size_t count)
画一个椭圆
- CGContextAddEllipseInRect(CGContextRef _Nullable c, CGRect rect)
出一个距形
弧:Arcs
两种方法创建弧度 第一种
假如想创建一个完整的圆圈,那么 开始弧度就是0 结束弧度是 2pi, 因为圆周长是 2*pi*r.
最后,函数执行完后,current point就被重置为(x,y).
还有一点要注意的是,假如当前path已经存在一个subpath,那么这个函数执行的另外一个效果是
会有一条直线,从current point到弧的起点
第二种
原理:首先画两条线,这两条线分别是 current point to (x1,y1) 和(x1,y1) to (x2,y2).
这样就是出现一个以(x1,y1)为顶点的两条射线,
然后定义半径长度,这个半径是垂直于两条射线的,这样就能决定一个圆了,更好的理解看下图,不过个人认为下图所标的 tangent point 1的位置是错误的。
最后,函数执行完后,current point就被重置为(x2,y2).
还有一点要注意的是,假如当前path已经存在一个subpath,那么这个函数执行的另外一个效果是
会有一条直线,从current point到(x1,y1)
画曲线
<pre name="code" class="objc">// 一个控制点的曲线
CGContextAddQuadCurveToPoint(CGContextRef _Nullable c,CGFloat cpx, // 控制点x的位置CGFloat cpy, // 控制点y的位置CGFloat x, // 直线的终点x的位置CGFloat y // 直线的终点y的位置)// 两个控制点的曲线
CGContextAddCurveToPoint(CGContextRef _Nullable c, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y)
画文字
NSString 对象方法:
画图片
UIImage 对象方法:
常用绘制路径函数
图片水印
//开启一个基于位图的图形上下文
void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)//从上下文中取得图片(UIImage)
UIImage* UIGraphicsGetImageFromCurrentImageContext();//结束基于位图的图形上下文
void UIGraphicsEndImageContext();
屏幕截图
//调用某个view的layer的renderInContext:方法即可
- (void)renderInContext:(CGContextRef)ctx;
这篇关于第三十四篇:Quartz2D绘图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!