2012-02-03 18 views
7

'un üzerine kalıcı bir NSWindow koyma NSWebView'un üstünde bazı UI denetimleri almak istiyorum ve bu sorundan dolayı "https://stackoverflow.com/questions/9120868/video-in-nswebview-hides-views-on-top-of-the-nswebview" Artık yakın düğmeleri kullanmadan "şeffaf" NSWindow eklemek istiyorum ., NSWebView'umun üstünde, dolayısıyla benim geçerli NSWindow'un üstüne.Başka bir NSWindow

Bunu nasıl gerçekleştirebilirim ve alttaki pencereyi hareket ettirsem bile, bu "yer paylaşımlı pencerenin" yerinde kaldığından emin olabilir miyim?

DÜZENLEME:: @ dzolanta yaklaşımı gayet iyi çalışıyor iken benim düzgün vb Outlet

cevap

20

Çocuk penceresi ne ihtiyaç vardır kullanmasına izin verecek bir NSWindowController kullanarak bunu yapmak mümkün olup olmadığını merak ediyorum.

NSBorderlessWindowMask ile NSWindow oluşturun ve - setOpaque: ve - setBackgroundColor: yöntemlerini kullanarak saydam olarak tanımlayın. Sonra yeni oluşturulan pencereyi NSWebView örneğini içeren bir pencere alt öğesi olarak ekleyin (NSWindow 's - addChildWindow:ordered: yöntemini kullanarak). Ana pencereyi taşımak otomatik olarak çocuk penceresinin hareket etmesine neden olur.

CGRect wRect = self.window.frame; 
NSView *contentView =self.window.contentView; 
CGRect cRect = contentView.frame; 

CGRect rect = CGRectMake(wRect.origin.x, wRect.origin.y, cRect.size.width, cRect.size.height); 
NSWindow *overlayWindow = [[NSWindow alloc]initWithContentRect:rect 
                styleMask:NSBorderlessWindowMask 
                 backing:NSBackingStoreBuffered 
                 defer:NO]; 
overlayWindow.backgroundColor = [NSColor redColor]; 
[overlayWindow setOpaque:NO]; 
overlayWindow.alphaValue = 0.5f; 

[self.window addChildWindow:overlayWindow ordered:NSWindowAbove]; 
+0

Ben penceresini görüntülemek başardı ve bu benim video akışı üstünde de . Henüz çalışmayan tek düşüncenin, yeniden boyutlandırıldığında pencerenin içeren pencereyle birlikte gerilmesi gerektiğidir. – Besi

+3

Bunu gerçekleştirmek için pencere denetleyicinizi (veya uygulama mimarinize bağlı olarak başka bir nesneyi) NSWindowDidResizeNotification'ın bir gözlemcisi olarak kaydettirin. Bildirim seçici, ebeveynin çerçevesinin alt kısmındaki alt pencerenin çerçevesini değiştiren bir yöntem belirtmelidir (tıpkı bir bindirme penceresi oluştururken olduğu gibi). İsterseniz windowDidResize: NSWindowDelegate yöntemini de kullanabilirsiniz. – dzolanta

0

Swift 3 versiyonu kullanılarak pencere denetleyicisi: kodunu çalışma ile

Güncelleme

final class OverlayWindowController: NSWindowController { 
    init(frame: NSRect) { 
    let window = NSWindow(contentRect: frame, styleMask: .borderless, backing: .buffered, defer: false) 
    super.init(window: window) 

    window.contentViewController = MyViewController() 
    window.backgroundColor = NSColor.clear 
    window.isOpaque = false 
    } 

    @available(*, unavailable) 
    required init?(coder: NSCoder) { 
    fatalError("init(coder:) is unavailable") 
    } 
} 
İlgili konular