2008-10-31 19 views
5

NSBox denetimi içeren bir pencerem var. Bu NSBox içinde başka denetimler, (popup'lar, metin alanları, vb ...) vardır.Tabaka Destekli Görünümler ve Titreşim Denetimleri

Aynı NIB dosyasında başka bir NSBox'ım var. koşullar. Ben bu güzel çapraz solmaya etkisi ile gerçekleşmesini istiyorum, bu yüzden aşağıdakileri yapın: my yöntemde

[[self.myWindow contentView] setWantsLayer:YES]; 

Ben bu kodu kullanın görünümler arasında geçiş ediyorum: NSWindowController en -awakeFromNib yöntemde

:

Bu sadece iyi çalışır
[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView]; 

, görünümler ben beklediğiniz gibi solmaya çapraz. Sorun şu ki, görüşlerin üzerindeki kontroller bazen belirgin bir nedenden ötürü yok oluyor. Her zaman aynı görünümler değildir (NSPopUpButtons özellikle buna eğilimlidir) ve genellikle odaklandıklarında tekrar görünürler.

Tüm denetimler katmanını da yedeklemek zorunda mıyım?


Güncelleştirme: Animasyonu açık gruplamada kaydırma hiçbir fark yaratmadı. Nib dosyasındaki setWantsLayer öğesinin açılması da bir fark yaratmadı, ancak ilginç olan şey, bunu yaptığımda NSPopupbuttons'un içerdiği görünüm tıklanıncaya kadar kaybolmasıdır. Katmanın NSPopup düğmelerinin el ile ayarlanması da bir fark yaratmadı. bir görünüm katmanı tüm subviews katman destekli olacak desteklenmektedir

http://www.cocoabuilder.com/archive/message/cocoa/2008/3/30/202691 http://www.cocoabuilder.com/archive/message/cocoa/2008/4/25/205134

+0

Ben de NSPopUpButtons ve CALayers ile bu sorunu yaşadım ve iyi bir çözüm bulamadık. –

cevap

4

, sizin bu yüzden:

Diğerleri bu sorun vardı, ama herhangi bir çözüm yayınlanmıştır bulamıyor görünür katman destekli olacak şekilde manuel olarak ayarlamanıza gerek yoktur. Burada neler olduğunu görmek için yeterli bilgi olup olmadığını bilmiyorum, ancak bir explict gruplaşma animasyonu kaydırmak eğer farklı davranışlar alırsanız ben merak olacaktır: Ayrıca

[NSAnimationContext beginGrouping]; 
[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView]; 
[NSAnimationContext endGrouping]; 

, orada bir neden setWantsLayer çağırdığınızı belirtin: awakeFromNib dosyasında sadece nib'de ayarlamak yerine (NSView denetçisinde bir onay kutusu olmalıdır).