🐰
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