简体   繁体   中英

Filing UIBezierPath in Swift

How can I color the inside of the UIBezier path? I am making a simple triangle and want to color inside of the triangle with red color.

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

The above code is written in the playground: Here is the result:

在此处输入图片说明

The problem is with how you're creating your UIBezierPath . You're creating it with a rectangle of the view's bounds, and then adding a triangle inside that rectangle. Therefore they're both getting filled – resulting in the entire view being red.

If you set usesEvenOddFillRule to true , you'll better see the result of the unwanted rectangle in your path:

在此处输入图片说明

If you just want to fill a triangle then replace this line:

let path = UIBezierPath(rect: rect)

with this:

let path = UIBezierPath()

This will create a new empty UIBezierPath that you can add your triangle to.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM