簡體   English   中英

在另一個NSView(特別是WebView)上繪制透明的覆蓋層

[英]Draw a transparent overlay over another NSView, specifically, a WebView

我需要在另一個NSView(特別是WebView)上繪制透明的覆蓋層。 目的是顯示一些具有半透明背景的通知文本。 在我的第一個實驗中,我創建了一個僅顯示綠色正方形的“覆蓋”視圖:

class Overlay: NSView {
    override func drawRect(dirtyRect: NSRect) {
        NSColor.greenColor().setFill()
        NSBezierPath(rect: CGRect(x: 10, y: 10, width: 1000, height: 1000)).fill()
    }
}

然后,在我的代碼中,實例化它們並像這樣添加它們:

webView = WebView(frame: bounds)
overlay = Overlay(frame: bounds)

addSubview(webView)
addSubview(overlay)

令我驚訝的是,這僅適用於某些頁面。 例如,如果您訪問https://twitter.com/screensavrninja ,它將使整個頁面顯示為灰色,並向您顯示退出彈出窗口。 變灰和彈出都在綠色方塊的頂部。

為什么會這樣呢? 有什么合適的方法可以使覆蓋物保持在頂部?

在AppKit中,子視圖的順序不一定確定繪制它們的順序。

出於性能方面的考慮,當同級視圖重疊時,Cocoa不會在同級視圖之間強制剪切或保證正確的無效和繪制行為。 如果要在另一個視圖前面繪制一個視圖,則應將前視圖作為后視圖的子視圖(或后代)。

參考

但是,如果您使視圖成為分層支持,則它們會遵循順序 因此,您可以嘗試啟用它。

否則,您可以使用子窗口顯示疊加層。 這具有能夠擴展到父代范圍之外的優點,並且在可可中相當普遍。 請參閱NSWindow文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM