2016-05-02 43 views
0

如何为UIBezier路径的内部着色?我正在制作一个简单的三角形,并想用红色在三角形内部进行着色。在Swift中归档UIBezierPath

class GraphView : UIView { 

    override func drawRect(rect: CGRect) { 

     UIColor.redColor().setFill() 
     UIColor.greenColor().setStroke() 

     let path = UIBezierPath(rect: rect) 
     path.moveToPoint(CGPointMake(100,620)) 
     path.addLineToPoint(CGPointMake(300,100)) 
     path.addLineToPoint(CGPointMake(500,620)) 
     path.addLineToPoint(CGPointMake(100,620)) 

     path.closePath() 

     path.fill() 
     path.stroke() 

    } 

} 


let graphView = GraphView(frame: CGRectMake(0,0,960,640)) 
XCPlaygroundPage.currentPage.liveView = graphView 

上面的代码写在操场:下面是结果:

enter image description here

+0

奥普抱歉!用代码和新屏幕截图更新了问题。 –

回答

1

的问题是你如何创建UIBezierPath。您使用视图边界的矩形创建它,然后在该矩形内添加一个三角形。因此它们都被填满了 - 导致整个视图变成红色。

如果设置usesEvenOddFillRuletrue,你会更清楚地看到你的路径不需要的矩形的结果:

enter image description here

如果你只是想填补一个三角形中,那么替换此行:

let path = UIBezierPath(rect: rect) 

与此:

let path = UIBezierPath() 

这会创建一个新的空的UIBezierPath您可以将三角形添加到。

+0

谢谢!有一点让我感到困惑的是,即使我省略了最后一行:path.addLineToPoint(CGPointMake(100,620)),它仍然会创建三角形。它不需要最后一行来完成三角形。 –

+1

@johndoe'path.closePath()'会通过将路径的最后一个点与路径的第一个点(用直线)连接来创建三角形 - 因此,最后一行确实是多余的。还要注意''path.fill()'会[隐式关闭路径](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIBezierPath_class/#//apple_ref/occ/instm/UIBezierPath /填)。 – Hamish