Paths中的几个重要元素
Paths中的几个重要元素
Points
void
CGContextMoveToPoint (
CGContextRef c,
CGFloat x,
CGFloat y
);
指定1个点成为current point
Quartz会跟踪current point1般履行完1个相干函数后,current
point都会相应的改变.
Lines
相干的几个函数
void
CGContextAddLineToPoint (
CGContextRef c,
CGFloat x,
CGFloat y
);
创建1条直线,从current point到
(x,y)
然后current point会变成(x,y)
void
CGContextAddLines (
CGContextRef c,
const CGPoint points[],
size_t count
);
创建多条直线,比如points有两个点,那末会画两条直线
从current point到
(x1,y1),
然后是(x1,y1)到(x2,y2)
然后current point会变成points中的最后1个点
Arcs
两种方法创建弧度
第1种
void
CGContextAddArc (
CGContextRef c,
CGFloat x,
//圆心的x坐标
CGFloat y,
//圆心的x坐标
CGFloat radius,
//圆的半径
CGFloat startAngle,
//开始弧度
CGFloat endAngle,
//结束弧度
int clockwise
//0表示顺时针,1表示逆时针
);
假设想创建1个完全的圆圈,那末
开始弧度就是0
结束弧度是
2pi,
由于圆周长是
2*pi*r.
最后,函数履行完后,current point就被重置为(x,y).
还有1点要注意的是,假设当前path已存在1个subpath,那末这个函数履行的另外1个效果是
会有1条直线,从current point到弧的出发点
第2种
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).
这样就是出现1个以(x1,y1)为顶点的两条射线,
然后定义半径长度,这个半径是垂直于两条射线的,这样就可以决定1个圆了,更好的理解看下图,不过个人认为下图所标的
tangent point
1的位置是毛病的。
最后,函数履行完后,current point就被重置为(x2,y2).
还有1点要注意的是,假设当前path已存在1个subpath,那末这个函数履行的另外1个效果是
会有1条直线,从current point到(x1,y1)
Curves
画曲线,1般是1条直线,然后定义几个控制点,使直线变曲折。
3次曲线函数
void
CGContextAddCurveToPoint (
CGContextRef c,
CGFloat cp1x,
//控制点1 x坐标
CGFloat cp1y,
//控制点1 y坐标
CGFloat cp2x,
//控制点2 x坐标
CGFloat cp2y,
//控制点2 y坐标
CGFloat x,
//直线的终点
x坐标
CGFloat y
//直线的终点
y坐标
);
假设第2个控制点(cp2x,cp2y)比(cp1x,cp1y)
更接近current point,那末会构成1个封闭的曲线
2次曲线函数
void
CGContextAddQuadCurveToPoint (
CGContextRef c,
CGFloat cpx,
//控制点
x坐标
CGFloat cpy,
//控制点
y坐标
CGFloat x,
//直线的终点
x坐标
CGFloat y
//直线的终点
y坐标
);
履行完函数貌似current point不会变化,没有具体测试过
Ellipses
void
CGContextAddEllipseInRect (
CGContextRef context,
CGRect rect
//1矩形
);
如果矩形是1个正方形,那末画出来就是1个圆
履行完函数貌似current point不会变化,没有具体测试过
Rectangles
void
CGContextAddRect (
CGContextRef c,
CGRect rect
);
1次性画出多个矩形
void
CGContextAddRects (
CGContextRef c,
const CGRect rects[],
size_t count
);
需要注意的是,画矩形有1些特别,current point没有产生变化
Creating a Path
调用函数
CGContextBeginPath 开始创建路径,线调用函数CGContextMoveToPoint设置出发点
然后开始画自己想画的路径,注意1下几点:
1.Lines, arcs, and curves,是从current
point开始的
2.假设想封闭1条路径,那末调用函数
CGContextClosePath
把当前点和出发点连接起来
3.当在画
arcs的时候,Quartz会画1条线从current
point 到
starting point
4.画矩形的时候不会有第3条那这样的的1条直线
5.创建完路径后,必须调用
painting
函数 fill or stroke the path,不然不会画上面东东在相应的装备上】
6.开始创建1个新的路径的时候,使用函数
CGContextBeginPath。
重复利用路径的相干函数和数据类型
CGPathCreateMutable 类似于
CGContextBeginPath
CGPathMoveToPoint 类似于
CGContextMoveToPoint
CGPathAddLineToPoint
类似于 CGContextAddLineToPoint
CGPathAddCurveToPoint
类似于 CGContextAddCurveToPoint
CGPathAddEllipseInRect
类似于 CGContextAddEllipseInRect
CGPathAddArc 类似于
CGContextAddArc
CGPathAddRect 类似于
CGContextAddRect
CGPathCloseSubpath 类似于
CGContextClosePath
CGPathRef
CGMutablePathRef
用CGContextAddPath函数把1个路径添加到graphics
context中
void
CGContextAddPath (
CGContextRef context,
CGPathRef path
);
Painting a Path
Stroking :画前途径
Filling :填充路径的封闭区域
影响Stroking的参数
Line width
void
CGContextSetLineWidth (
CGContextRef c,
CGFloat width
);
Line join:线转弯的时候的样式,比如油滑的方式
void
CGContextSetLineJoin (
CGContextRef c,
CGLineJoin join
);
Line cap:线的两真个样式,比如两端变的油滑
void
CGContextSetLineCap (
CGContextRef c,
CGLineCap cap
);
Miter limit:当Line join的模式是Miter
join的时候,这个参数会有影响
void
CGContextSetMiterLimit (
CGContextRef c,
CGFloat limit
);
Line dash pattern:虚线相干
void
CGContextSetLineDash (
CGContextRef c,
CGFloat phase,
const CGFloat lengths[],
size_t count
);
Stroke color space
void
CGContextSetStrokeColorSpace (
CGContextRef c,
CGColorSpaceRef colorspace
);
Stroke color
void
CGContextSetStrokeColor (
CGContextRef c,
const
CGFloat components[]
);
void
CGContextSetStrokeColorWithColor (
CGContextRef c,
CGColorRef color
);
Stroke pattern(和透明度相干)
void
CGContextSetStrokePattern (
CGContextRef c,
CGPatternRef pattern,
const CGFloat components[]
);
Stroking的相干函数
Strokes当前path.
void
CGContextStrokePath (
CGContextRef c
);
Strokes 指定的
矩形.
void
CGContextStrokeRect (
CGContextRef c,
CGRect rect
);
Strokes 指定的
矩形,
使用指定的宽度.
void
CGContextStrokeRectWithWidth (
CGContextRef c,
CGRect rect,
CGFloat width
);
Strokes 指定的椭圆.
void
CGContextStrokeEllipseInRect (
CGContextRef context,
CGRect rect
);
Strokes 1些直线.
void
CGContextStrokeLineSegments (
CGContextRef c,
const CGPoint points[],
size_t count
);
决定是Stroking
还是
------分隔线----------------------------
------分隔线----------------------------