Julian Pomper Julian Pomper - 5 months ago 10
Swift Question

Why can't I fill a UIBezierPath with custom UIColor?

I want to fill a

UIBezierPath
with my custom color, but only the default colors like
UIColor.redColor
or
UIColor.blueColor
are working.

Here is my code:

override func drawRect(rect: CGRect) {

let layerHeight = self.layer.frame.height
let layerWidth = self.layer.frame.width
let width:CGFloat = 50

let bezierPath = UIBezierPath()
bezierPath.moveToPoint(CGPointMake(layerWidth, layerHeight))
bezierPath.addLineToPoint(CGPointMake(layerWidth, layerHeight - width))
bezierPath.addLineToPoint(CGPointMake(layerWidth - width, layerHeight))
bezierPath.closePath()

// UIColor.blueColor().setFill() works, but a custom color does not:
UIColor(colorLiteralRed: 23, green: 34, blue: 200, alpha: 1).setFill()
bezierPath.fill()
}

Answer

You are using wrong values. The color values have to be in range 0.0 - 1.0:

UIColor(colorLiteralRed: 0.2, green: 0.3, blue: 0.9, alpha: 1)

I would then recommend to use a slightly different initializer instead:

UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)

What happened previously in your code is that all values above 1.0 are treated as 1.0, therefore together forming white, which you probably did not see as filling anything.