UIBezierPath是UIKit中的一个关于图形绘制的类,是通过Quartz 2D也就是CG(Core Graphics)CGPathRef的封装得到的。
初始化方法
-
UIBezierPath()
这个使用比较多,因为这个工厂方法创建的对象,我们可以根据我们的需要任意定制样式,可以画任何我们想画的图形。
public convenience init(rect: CGRect)
创建并返回一个UIBezierPath
对象,路径是一个矩形public convenience init(roundedRect rect: CGRect, cornerRadius: CGFloat)
创建一个UIBezierPath
对象,路径是带圆角的矩形(四个角都是圆角)
public convenience init(roundedRect rect: CGRect, byRoundingCorners corners: UIRectCorner, cornerRadii: CGSize)
创建一个UIBezierPath
对象,路径是带圆角的矩形(可以选择那一个角是圆角)
override func drawRect(rect: CGRect) {
let p = UIBezierPath(roundedRect: CGRectMake(0, 0, 100, 100), byRoundingCorners: [.BottomLeft,.TopRight], cornerRadii: CGSize(width: 10, height: 10))
UIColor.blueColor().setStroke()
p.stroke()
}
public convenience init(ovalInRect rect: CGRect)
创建一个UIBezierPath
对像,路径是椭圆(也可以创建圆,如果给的矩形是一个正方形)
public convenience init(arcCenter center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool)
创建一个UIBezierPath
对象,路径是弧度。
center: 圆形;radius:半径;startAngle:开始的弧度,endAngle:结束的弧度;clockwise:是否顺时针;
路径的构建
// Path construction
// 设置画笔起始点
public func moveToPoint(point: CGPoint)
// 从当前点到指定点绘制直线
public func addLineToPoint(point: CGPoint)
// 添加弧线
public func addArcWithCenter(center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool)
public func closePath()
// 移除所有的点,删除所有的subPath
public func removeAllPoints()
画一个三角形
let p = UIBezierPath()
p.moveToPoint(CGPoint(x: 10, y: 10))
p.addLineToPoint(CGPoint(x: 30, y: 10))
p.addLineToPoint(CGPoint(x: 20,y: 30))
p.addLineToPoint(CGPoint(x: 10,y: 10))
// 最后的闭合线是可以通过调用closePath方法来自动生成的
UIColor.blueColor().setStroke()
p.stroke()
画二次贝塞尔曲线
public func addQuadCurveToPoint(endPoint: CGPoint, controlPoint: CGPoint)
endPoint: 终端点
controlPoint: 控制点,对于二次贝尔曲线只有一个控制点
let p = UIBezierPath()
p.moveToPoint(CGPoint(x: 10, y: 10))
p.addQuadCurveToPoint(CGPoint(x: 50,y: 10), controlPoint: CGPoint(x: 30, y: 50))
UIColor.blueColor().setStroke()
p.stroke()
//这个样式看起来很像sin或者cos函数
画三次贝塞尔曲线
public func addCurveToPoint(endPoint: CGPoint, controlPoint1: CGPoint, controlPoint2: CGPoint)
endPoint: 终端点
controlPoint1: 控制点
controlPoint2:控制点
Accessing Drawing Properties
// Drawing properties
//线的宽度
public var lineWidth: CGFloat
//设置线条拐角帽的样式
public var lineCapStyle: CGLineCap
/*
public enum CGLineCap : Int32 {
case Butt //默认
case Round //轻微圆角
case Square //方形
}
*/
//设置两条线连结点的样式
public var lineJoinStyle: CGLineJoin
/*
public enum CGLineJoin : Int32 {
case Miter //默认
case Round // 圆滑衔接
case Bevel // 斜角衔接
}
*/
//两条线交汇处内角和外角之间的最大距离,需要交叉点类型为kCGLineJoinMiter是生效,最大限制为10
public var miterLimit: CGFloat // Used when lineJoinStyle is kCGLineJoinMiter
// 个人理解为绘线的精细程度,默认为0.6,数值越大,需要处理的时间越长
public var flatness: CGFloat
//决定使用even-odd或者non-zero规则
public var usesEvenOddFillRule: Bool // Default is NO. When YES, the even-odd fill rule is used for drawing, clipping, and hit testing.
public func setLineDash(pattern: UnsafePointer<CGFloat>, count: Int, phase: CGFloat)
public func getLineDash(pattern: UnsafeMutablePointer<CGFloat>, count: UnsafeMutablePointer<Int>, phase: UnsafeMutablePointer<CGFloat>)
Drawing Paths
// Path operations on the current graphics context
public func fill()
public func stroke()
// These methods do not affect the blend mode or alpha of the current graphics context
public func fillWithBlendMode(blendMode: CGBlendMode, alpha: CGFloat)
public func strokeWithBlendMode(blendMode: CGBlendMode, alpha: CGFloat)
Clipping Paths
// 在这以后的图形绘制超出当前路径范围则不可见
public func addClip()
Hit Detection
// Path info
// 是否为空
public var empty: Bool { get }
//整个路径相对于原点的位置以及宽度
public var bounds: CGRect { get }
//当前画笔的位置
public var currentPoint: CGPoint { get }
public func containsPoint(point: CGPoint) -> Bool
Applying Transformations
public func applyTransform(transform: CGAffineTransform)
// 反方向绘制path
public func bezierPathByReversingPath() -> UIBezierPath
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。