2013-05-14 42 views
1
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

CGContextSetStrokeColorWithColor(currentContext, hh2DarkGray.CGColor); 
CGFloat lengths[] = {0, 8}; 
CGContextSetLineCap(currentContext, kCGLineCapRound); 
CGContextSetLineWidth(currentContext, 1); 
CGContextSetLineDash(currentContext, 0.0f, lengths, 2); 

CGContextBeginPath(currentContext); 
CGContextMoveToPoint(currentContext, x1, y1); 
CGContextAddLineToPoint(currentContext, x2, y2); 

CGContextClosePath(currentContext); 
CGContextDrawPath(currentContext, kCGPathStroke); 

我在做什麼錯在上面的代碼,使得它的點不均勻間隔?它看起來像這樣。這爲什麼不能正確地點線?

。 .. .. .. .. .. .. .. 當我需要它看起來像這樣 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。

我完全失去了,我能找到的所有其他帖子都沒有指出這類問題。請幫忙?

+0

[0,4]對於破折號模式看起來不像你想要的。 CGContextSetLineDash的文檔說:例如,傳遞一個值爲[2,3]的數組將設置一個短劃線模式,它在一個2用戶空間單元長的着色段和一個3用戶空間單元長未上漆的細分市場。通過值[1,3,4,2]將圖案設置爲1單元塗漆部分,3單元未塗漆部分,4單元塗漆部分和2單元未塗漆部分。 – 2013-05-14 15:40:29

+0

你可能會建議一些值嗎?我一直在嘗試幾種不同的方式,並且之前也閱讀過文檔。 [0,4]確實均勻分佈,但我需要在這些點之間留出更多空間。現在我已經在0,8分了,這就是上面所說的。我複製了錯誤的值。我將在帖子中改變這一點。 – user2282932 2013-05-14 16:18:38

+0

對於所繪的線段的長度,嘗試使用除「0」以外的其他值嗎?嘗試{4,4} ... – 2013-05-14 16:23:47

回答

4

問題是,你正在關閉路徑 - 這隱式繪製一條線回到第一個點。如果您的路徑只包含兩點之間的直線,則基本上會獲得兩條直線相互疊加的直線,這會導致出現額外的點(這些是在短劃線模式中具有偏移量的第二條線)。

解決方案:只需刪除呼叫CGContextClosePath

使用{1, 8}代替{0, 8}作爲破折號模式也更合乎邏輯,因爲您希望繪製一個點,但實際上,它似乎沒有什麼區別。

+1

聖母牛!謝謝!!!!我懷疑它是這樣的,但我沒有看到任何地方,但長度。再次感謝。 – user2282932 2013-05-14 16:58:31

0

嘗試增加0.5你行的座標:

CGContextMoveToPoint(currentContext, x1 + 0.5, y1 + 0.5); 
CGContextAddLineToPoint(currentContext, x2 + 0.5, y2 + 0.5); 

你必須考慮在邏輯座標,而不是在像素指標。如果要繪製像素完美線條,則必須傳遞某些像素中心的座標。否則,你會得到四捨五入的文物。

+0

感謝您的建議。但是,這似乎沒有什麼區別。我也對0.5值進行了篡改,以確保它不僅僅是分鐘。任何其他想法? – user2282932 2013-05-14 15:37:18