---
title: "draw(_:in:)"
framework: quartzcore
role: symbol
role_heading: Instance Method
path: "quartzcore/calayerdelegate/draw(_:in:)"
---

# draw(_:in:)

Tells the delegate to implement the display process using the layer’s context.

## Declaration

```swift
optional func draw(_ layer: CALayer, in ctx: CGContext)
```

## Parameters

- `layer`: The layer whose contents need to be drawn.
- `ctx`: The graphics context to use for drawing. The graphics context incorporates the appropriate scale factor for drawing to the target screen.

## Discussion

Discussion The draw(_:in:) method is called when the layer is marked for its content to be reloaded, typically with the setNeedsDisplay() method. It is not called if the delegate implements the display(_:) method. You can use the context to draw vectors, such as curves and lines, or images with the draw(_:in:byTiling:) method. The following code shows how you can create a class named LayerDelegate that implements CALayerDelegate and sets it as a layer’s (named sublayer) delegate. When setNeedsDisplay() is called on sublayer, the delegate’s draw(_:in:) method draws an ellipse fitting the bounding box of the layer using the boundingBoxOfClipPath function. let delegate = LayerDelegate()      lazy var sublayer: CALayer = {     let layer = CALayer()          layer.delegate = self.delegate          return layer }()      // sublayer.setNeedsDisplay()      class LayerDelegate: NSObject, CALayerDelegate {     func draw(_ layer: CALayer, in ctx: CGContext) {         ctx.addEllipse(in: ctx.boundingBoxOfClipPath)         ctx.strokePath()     } } important: This method is not called if the delegate implements display(_:).

## See Also

### Providing the Layer’s Content

- [display(_:)](quartzcore/calayerdelegate/display(_:).md)
- [layerWillDraw(_:)](quartzcore/calayerdelegate/layerwilldraw(_:).md)
