2015-04-18 101 views
1

我想填充一些我繪製的三角形,但是它們沒有填充。下面是在上下文中繪製的代碼,正如您在圖片中看到的那樣,路徑筆畫很好。CGContextDrawPath不會填充

func draw(context:CGContextRef) { 
    CGContextBeginPath(context) 
    CGContextMoveToPoint(context, self.peak.x, self.peak.y) 
    CGContextAddLineToPoint(context, self.left.x,self.left.y) 
    CGContextMoveToPoint(context, self.left.x, self.left.y) 
    CGContextAddLineToPoint(context, self.right.x,self.right.y) 
    CGContextMoveToPoint(context, self.right.x, self.right.y) 
    CGContextAddLineToPoint(context, self.peak.x,self.peak.y) 
    CGContextSetStrokeColorWithColor(context,UIColor.blackColor().CGColor) 
    CGContextSetFillColorWithColor(context,UIColor.redColor().CGColor) 
    CGContextDrawPath(context, kCGPathFillStroke) 
} 

我把這個函數調用了兩次,輸出是這個。

enter image description here

我在看Quartz2D節目指南,但不明白爲什麼這會不會繼續進行。這隻發生在繼承自UIView的類中的操場上,沒有什麼奇特的。

回答

3

CGContextMoveToPoint()每次調用開始一個新的子路徑, 然後將其填滿,如果你已經關閉了它(並沒有什麼 看到,如果你填單線段)。要中風和填充一個三角形,請使用:

CGContextBeginPath(context) 

CGContextMoveToPoint(context, self.peak.x, self.peak.y) 
CGContextAddLineToPoint(context, self.left.x,self.left.y) 
CGContextAddLineToPoint(context, self.right.x,self.right.y) 
CGContextClosePath(context) 

CGContextSetStrokeColorWithColor(context,UIColor.blackColor().CGColor) 
CGContextSetFillColorWithColor(context,UIColor.redColor().CGColor) 
CGContextDrawPath(context, kCGPathFillStroke) 
+0

啊謝謝,這是有道理的。它是如何找出關閉三角形的?或CGContextAddLineToPoint也移動當前點? – chris

+0

@chris:是的,CGContextAddLineToPoint()附加從當前點到給定點的線段,並使新點成爲當前點。 CGContextClosePath()將當前點的線段追加到子路徑的初始點。 –