/ / Nakreslite priehľadné prekrytie nad iným objektom NSView, konkrétne WebView - objektív c, makro, kakao, rýchly, nsview

Nakreslite transparentné prekrytie nad iným objektom NSView, a to konkrétne WebView - objektív-c, makro, kakao, rýchly, nsview

Potrebujem vytvoriť transparentnú prekryvnú vrstvu nad druhouNSView, konkrétne WebView. Cieľom je zobraziť nejaký text upozornenia s polopriehľadným pozadím. Pri prvom mojom experimentu som vytvoril zobrazenie prekrytia, ktoré práve zobrazuje zelený štvorec:

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

a potom v mojom kóde som ich konkretizoval a pridal im takto:

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

addSubview(webView)
addSubview(overlay)

Na moje prekvapenie to funguje len s niektorými stránkami. Ak napríklad idete https://twitter.com/screensavrninja, vymaže celú stránku a zobrazí sa vyskakovacie okno. Obidva šedivé a pop-in sa stávajú na vrchole zeleného námestia.

Prečo sa to deje? Aký je vhodný spôsob, ako mať prekrytie a nechať ju zostať na vrchole?

odpovede:

0 pre odpoveď č. 1

V aplikácii AppKit poradie čiastkových prehľadov neznamená nutne určenie poradia, v ktorom budú nakreslené.

Z dôvodov výkonu sa kakao nevykonávaorezávanie medzi zobrazeniami súrodencov alebo zaručenie správneho znehodnotenia a správania pri kresbe, keď sa súrodenské pohľady prekrývajú. Ak chcete zobraziť výhľad pred iným pohľadom, mali by ste z čelného pohľadu zobraziť subview (alebo potomok) zadného pohľadu.

referencie

Ak však vytvoríte pohľad na vrstvu, podporujú sa rešpektovať objednávanie, Mohli by ste to skúsiť.

V opačnom prípade môžete použiť podradené okno na zobrazenie prekrytia. To má tú výhodu, že je schopné presahovať hranice rodičov a je pomerne bežné u kakaa. Pozrite si dokumentáciu pre NSWindow.