🐰
CALayerのdraw(in:)は描画すべきframe.sizeが無いと呼ばれない
CALayerでCGContextを使った独自の描画をする手立てには、draw(in:)をオーバーライドして使う方法があります。しかし、このメソッドはそのレイヤー自身のframe.sizeに0を含んでいると、そもそもコールされません。draw(in:)を呼ぶ前にまずframe.sizeのwidth/heightいずれも1以上の大きさにしておきましょう。
CGContextを使ったCALayer描画の基本手順:
- レイヤーのカスタムクラスを作り、
draw(in:)をオーバーライドし、任意の描画処理を実装する - レイヤーのframe値(特にサイズ)を確定させるか、(1, 1)以上のサイズにしておく
- レイヤーに対して
setNeedsDisplay()をコールして、システムに描画更新をマークする
Discussion