/ / Нарисувайте прозрачен слой върху друг NSView, по-специално WebView - цел-c, macos, какао, swift, nsview

Начертайте прозрачно наслагване върху друг NSView, по-конкретно, WebView - цел-c, мако, какао, бързо, nsview

Трябва да начертая прозрачен слой върху друг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, тя показва цялата страница и ви показва изскачащо съобщение. Както просяването, така и появата се случват на върха на зеления квадрат.

Защо се случва това? Какъв е подходящият начин да имаме наслагване и да остане на върха?

Отговори:

0 за отговор № 1

В AppKit редът на поддирекциите не определя непременно реда, в който ще бъдат изтеглени.

От съображения за производителност, Какао не прилагаподстригване сред братски изгледи или гарантиране на правилно анулиране и поведение при рисуване, когато братските изгледи се припокриват. Ако искате изглед да бъде нарисуван пред друг изглед, трябва да направите изглед отпред на изглед (или потомък) на изгледа отзад.

препратка

Обаче, ако направите подредбата на слоя, те спазвайте поръчката, Така че можете да опитате да разрешите това.

В противен случай можете да използвате дъщерен прозорец, за да покажете наслагването. Това има предимството, че може да се простира отвъд границите на родителя и е доста често срещано в какаото. Вижте документация за NSWindow.