标签:ios objective-c uiview quartz 2d
1.Quartz2D在iOS开发中的价值
2.图形上下文
(输出目标可以是PDF文件、Bitmap或者显示器的窗口上)
3.自定义view
3)
CGContextRef ctx= UIGraphicsGetCurrentContext();
CGContextMoveToPoint(ctx,10, 10);
CGContextAddLineToPoint(ctx,100, 100);
CGContextStrokePath(ctx); //CGContextFillPath(ctx);
UIGraphicsGetCurrentContext()
指定一个点成为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)
画出一个距形
CGContextAddRect(CGContextRef _Nullable c, CGRect rect) CGContextAddRects(CGContextRef _Nullable c, const CGRect * _Nullable rects, size_t count)
弧:Arcs
两种方法创建弧度 第一种
void CGContextAddArc ( CGContextRef c, CGFloat x, //圆心的x坐标 CGFloat y, //圆心的x坐标 CGFloat radius, //圆的半径 CGFloat startAngle, //开始弧度 CGFloat endAngle, //结束弧度 int clockwise //0表示顺时针,1表示逆时针 );
假如想创建一个完整的圆圈,那么 开始弧度就是0 结束弧度是 2pi, 因为圆周长是 2*pi*r.
最后,函数执行完后,current point就被重置为(x,y).
还有一点要注意的是,假如当前path已经存在一个subpath,那么这个函数执行的另外一个效果是
会有一条直线,从current point到弧的起点
第二种
void CGContextAddArcToPoint ( CGContextRef c, CGFloat x1, //端点1的x坐标 CGFloat y1, //端点1的y坐标 CGFloat x2, //端点2的x坐标 CGFloat y2, //端点2的y坐标 CGFloat radius //半径 );
原理:首先画两条线,这两条线分别是 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)
//Mode参数决定绘制的模式 void CGContextDrawPath(CGContextRef c, CGPathDrawingMode mode) //绘制空心路径 void CGContextStrokePath(CGContextRef c) //绘制实心路径 void CGContextFillPath(CGContextRef c)
绘制好的图形
绘制好的图形
绘制好的图
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:ios objective-c uiview quartz 2d
原文地址:http://blog.csdn.net/u010372095/article/details/49447663