2016-03-26 32 views
1

Bu kodu ViewController'ımda kullanıyorum. Programlı olarak eklediğim manzara, ancak görülmeyecek bir yer. NSWindow (veya NSView) görünümlerini programlı olarak nasıl ekleyebilirim?

override func viewDidLoad() { 
    super.viewDidLoad() 

    let f: NSRect = NSMakeRect(0, 0, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.layer?.backgroundColor = NSColor.yellowColor().CGColor 
    self.view.addSubview(v) 

} 

Ayrıca ben özel bir NSWindowController oluşturma çalıştı ve set olduğu arayüz oluşturucu film şeridindeki benim ana penceresinin Custom Class olarak. Ancak gidip almak tuhaf görünüyordu ve o,/

ben bile çevrimiçi önerdi bulundu cevapları biri olarak v.wantsLayer = true ayarlama çalıştı:

override func windowDidLoad() { 
    super.windowDidLoad() 

    let f: NSRect = NSMakeRect(0, 0, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.layer?.backgroundColor = NSColor.yellowColor().CGColor 
    self.window?.contentView?.addSubview(v) 

} 

Bu da çalışmaz: Orada Aşağıdaki kod var Tabii hiçbir şey yapmadı.

Burada yanlış olan ne yapıyorum?

+0

ayarlamak gerekir 'v.wantsLayer = TRUE –

+0

Denedim' v.wantsLayer = TRUE hem yöntemde) viewDidLoad ('çağırır' ve windowDidLoad() 'bir kez daha, ancak her iki görünüm hala görünmez. Hatta contentView'un katman rengini "clearColor" olarak ayarlamak gibi çılgın şeyler denedim, belki de tüm görünümler bunun altına eklendiğini düşünerek. Ben bile "self.window? .contentView? .addSubview (v, konumlandırılmış: NSWindowOrderingMode.Above, relativeTo: self.window? .contentView)' yapmak için şimdiye kadar gitti ... Hala puro yok. Görüşler görülecek bir yer değildir. –

cevap

0

Tüm olası senaryoları tükettiğimde kendi sorumu yanıtladım ve tabiki suçlu wantsLayer.

Başlangıçta yaptım: Ben görünümü contentView eklendiğini olduğunu görebiliyordu

override func windowDidLoad() { 
    super.windowDidLoad() 

    let f: NSRect = NSMakeRect(32, 32, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.layer?.backgroundColor = NSColor.greenColor().CGColor 
    v.wantsLayer = true 
    self.window?.contentView?.addSubview(v) 

    if let views = self.window?.contentView?.subviews { 
     for v in views { 
      print(v.frame) 
     } 
    } 
} 

, ancak görünmez oldu. Hatamın farkına varmadan önce bir çok şey yaptım:

v.wantsLayer = true bildirimi (tabi ki), katmanın kendisinin backgroundColor'unu belirttiğim satırın üstünde olmalıdır.

Yani evet ... Bu şimdi çalışır:

override func windowDidLoad() { 
    super.windowDidLoad() 
    let f: NSRect = NSMakeRect(32, 32, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.wantsLayer = true 
    v.layer?.backgroundColor = NSColor.greenColor().CGColor 
    self.window?.contentView?.addSubview(v) 
} 
+1

http://stackoverflow.com/a/31214482/2303865 –