🐰
NSViewでmakeBackingLayerを使うとupdateLayerは呼ばれません
NSViewのバッキングレイヤーに独自のレイヤーを設定すると、どうもupdateLayer()
が呼ばれない仕組みのようです。updateLayer()
を使いたければmakeBackingLayer()
を諦めるのが現状とれる方針です。
例えば以下のような実装で、CustomViewに対してredraw()
を実行してもupdateLayer()
は実行されません。
class CustomView: NSView {
override func makeBackingLayer() -> CALayer {
// バッキングレイヤーに独自のレイヤー(CALayer)を設定
CustomLayer()
}
override var wantsUpdateLayer: Bool {
// ビューの描画でdrawRect()ではなくupdateLayer()を使う設定にする
true
}
private func setup() {
wantsLayer = true
layerContentsRedrawPolicy = .onSetNeedsDisplay
}
func redraw() {
// updateLayer() が呼ばれることを期待して、再描画を予約
needsDisplay = true
}
override func updateLayer() {
// 任意の描画処理
}
}
canDrawSubviewsIntoLayerにtrueを設定すると、サブビューの描画処理はdrawRect()で実行されるようです。
関連
Discussion