Ich habe ein Fenster, das ein NSBox-Steuerelement enthält. In diesem NSBox sind mehrere andere Steuerelemente, (Popups, Textfelder, etc ...)Layer Backed Views und Flackern Kontrollen
Ich habe zwei andere NSBox in der gleichen NIB-Datei, die mit Steuerelementen gefüllt sind, die ich mit der ersten unter bestimmten austauschen möchte Bedingungen. Ich möchte dies mit einem schönen Cross-Fade-Effekt passieren, so dass ich wie folgt vorgehen:
Im -awakeFromNib
Methode des NSWindowController:
[[self.myWindow contentView] setWantsLayer:YES];
In meiner Methode, wo ich die Ansichten bin Schale ich diesen Code verwenden :
[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView];
Das funktioniert gut, die Ansichten überblenden genau so, wie ich es erwarten würde. Das Problem besteht darin, dass die Steuerelemente in den Ansichten manchmal ohne ersichtlichen Grund verschwinden. Es sind nicht immer die gleichen Ansichten (obwohl die NSPopUpButtons besonders anfällig dafür sind), und sie erscheinen normalerweise wieder, wenn sie den Fokus haben.
Muss ich auch alle Steuerelemente sichern?
Update: Wrapping der Animation in expliziter Gruppierung machte keinen Unterschied. Das Aktivieren von setWantsLayer in der Nib-Datei hat ebenfalls keinen Unterschied gemacht, aber das Interessante daran ist, dass die NSPopup-Schaltflächen verschwinden, wenn auf ihre enthaltene Ansicht geklickt wird. Das manuelle Festlegen der Layer auf den NSPopup-Tasten hat ebenfalls keinen Unterschied gemacht.
Es scheint, dass andere dieses Problem gehabt haben, aber ich kann keine Lösungen geschrieben finden:
http://www.cocoabuilder.com/archive/message/cocoa/2008/3/30/202691 http://www.cocoabuilder.com/archive/message/cocoa/2008/4/25/205134
Ich hatte auch dieses Problem mit NSPopUpButtons und CALayers und habe keine anständige Lösung gefunden. –