畫虛線需要用到函數:
CGContextSetLineDash
此函數需要四個參數:
context – 這個不用多說
phase - 稍後再說
lengths – 指明虛線是如何交替繪制,具體看例子
count – lengths數組的長度
lengths的值{10,10}表示先繪制10個點,再跳過10個點,如此反複,如圖:

如果把lengths值改為{10, 20, 10},則表示先繪制10個點,跳過20個點,繪制10個點,跳過10個點,再繪制20個點,如此反複,如圖:
注意count的值等于lengths數組的長度
phase參數表示在第一個虛線繪制的時候跳過多少個點,舉例說明:
如圖顯示:
由于lengths值為{10,5},第一條線就是繪制10,跳過5,反複繪制。
第二條線的phase值為5,則首先繪制【10減去5】,再跳過5,繪制10,反複繪制。
第三條給也如此,先繪制2,再跳過5,如此反複。
UPDATE:
以下是一個Swift畫虛線的小例子,總體上是差不多的,直接把這個View放到ViewController中即可使用:
class CustomView: UIView {
var beginPoint: CGPoint = CGPointZero
var endPoint: CGPoint?
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
beginPoint = touches.anyObject()!.locationInView(self)
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
endPoint = touches.anyObject()?.locationInView(self)
setNeedsDisplay()
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
override func drawRect(rect: CGRect) {
if let point = endPoint {
let context = UIGraphicsGetCurrentContext()
let lengths: [CGFloat] = [5.0, 5.0]
CGContextSetLineDash(context, 0, lengths, 2);
CGContextMoveToPoint(context, beginPoint.x, beginPoint.y);
CGContextAddLineToPoint(context, point.x, point.y);
CGContextStrokePath(context);
}
}