🐰

CALayerのdraw(in:)は描画すべきframe.sizeが無いと呼ばれない

2025/02/14に公開

CALayerでCGContextを使った独自の描画をする手立てには、draw(in:)をオーバーライドして使う方法があります。しかし、このメソッドはそのレイヤー自身のframe.sizeに0を含んでいると、そもそもコールされません。draw(in:)を呼ぶ前にまずframe.sizeのwidth/heightいずれも1以上の大きさにしておきましょう。

CGContextを使ったCALayer描画の基本手順:

  1. レイヤーのカスタムクラスを作り、draw(in:)をオーバーライドし、任意の描画処理を実装する
  2. レイヤーのframe値(特にサイズ)を確定させるか、(1, 1)以上のサイズにしておく
  3. レイヤーに対してsetNeedsDisplay()をコールして、システムに描画更新をマークする

Discussion