天天看點

iOS 使用Quartz 2D畫虛線

畫虛線需要用到函數:

CGContextSetLineDash

此函數需要四個參數:

context – 這個不用多說

phase - 稍後再說

lengths – 指明虛線是如何交替繪制,具體看例子

count – lengths數組的長度

lengths的值{10,10}表示先繪制10個點,再跳過10個點,如此反複,如圖:

iOS 使用Quartz 2D畫虛線

如果把lengths值改為{10, 20, 10},則表示先繪制10個點,跳過20個點,繪制10個點,跳過10個點,再繪制20個點,如此反複,如圖:

iOS 使用Quartz 2D畫虛線

注意count的值等于lengths數組的長度

phase參數表示在第一個虛線繪制的時候跳過多少個點,舉例說明:

如圖顯示:

iOS 使用Quartz 2D畫虛線

由于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);

        }

}

iOS 使用Quartz 2D畫虛線

繼續閱讀