NSBox コントロールを含むウィンドウがあります。その NSBox には、他のいくつかのコントロール (ポップアップ、テキスト フィールドなど) があります。
同じ NIB ファイルに、特定の条件下で最初のコントロールと交換したいコントロールで満たされた 2 つの NSBox があります。素敵なクロスフェード効果でこれを実現したいので、次のようにします。
NSWindowController の-awakeFromNib
メソッドで:
[[self.myWindow contentView] setWantsLayer:YES];
ビューを切り替える方法では、次のコードを使用します。
[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView];
これは問題なく機能し、期待どおりにビューがクロスフェードします。問題は、ビューのコントロールが明確な理由もなく消えることがあるということです。常に同じビューとは限りません (ただし、NSPopUpButton は特にその傾向があるようです)。通常、フォーカスがあると再び表示されます。
すべてのコントロール レイヤーもバッキングする必要がありますか?
更新: 明示的なグループ化でアニメーションをラップしても違いはありませんでした。Nib ファイルで setWantsLayer をオンにしても違いはありませんでしたが、興味深いのは、私がそうすると、含まれているビューがクリックされるまで NSPopupbuttons が消えることです。NSPopupbuttons でレイヤーを手動で設定しても、違いはありませんでした。
他の人がこの問題を抱えているようですが、投稿された解決策が見つかりません:
http://www.cocoabuilder.com/archive/message/cocoa/2008/3/30/202691 http://www.cocoabuilder.com/archive/message/cocoa/2008/4/25/205134