Friday, 9 August 2019

draw#rect core graphics, on top of a layer?

Say you have this in a UIView,

override func draw(_ rect: CGRect) {
    let c = UIGraphicsGetCurrentContext()
    c?.setLineWidth(10.0)
    c?.move(to: CGPoint(x: 10.0, y: 10.0))
    c?.addLine(to: CGPoint(x: 40.0, y: 40.0))
    ... lots of complicated drawing here, sundry paths, colors, widths etc ...
    c?.strokePath()
}

Of course, it will draw the hell out of your drawing for you.

But say in the same UIView you do this ...

func setup() { // in inits, layout
    if nil etc {
      thingLayer = CAShapeLayer()
      self.layer.insertSublayer(thingLayer, at: 0)
      thingLayer.fillColor = UIColor.yellow.cgColor }
    thingLayer.frame = bounds
    let path = ... some fancy path
    thingLayer.path = path.cgPath
}

Indeed, the new yellow layer is drawn over the drawing in draw#rect.

How do you draw - using core graphics commands - either on to thingLayer, or perhaps on to another layer on top of all??

Core graphics commands:

    let c = UIGraphicsGetCurrentContext()
    c?.setLineWidth(10.0)
    c?.move(to: CGPoint(x: 10.0, y: 10.0))
    c?.addLine(to: CGPoint(x: 40.0, y: 40.0))
    c?.strokePath()

seem to draw to a place directly above or on the main .layer

(Well that appears to be the case, as far as I can see.)

How do you draw - using core graphics commands - either on to thingLayer, or perhaps on to another layer on top of all??

Surely in draw#rect you can specify which cgLayer to draw to?

In draw#rect, can you make another cgLayer and draw to context, that cgLayer?



from draw#rect core graphics, on top of a layer?

No comments:

Post a Comment