6

Ich versuche, meine NSScrollView (und damit eine enthaltene NSOutlineView), um eine verschwommene NSVisualEffectView mit Hinter-Fenster-Blending-Effekt zu verwenden.NSVisualEffectView hinter NSScrollView

Ich habe NSVisualEffectView die Containeransicht erfolgreich erstellt und meine Bildlaufansicht als Unteransicht platziert. Dies scheint gut zu funktionieren (solange ich alle meine Tabellenzellen, Tabellen, nsscrollview usw. transparent mache).

Allerdings habe ich nun unter Barrierefreiheit die Option 'Transparenz reduzieren' aktiviert und plötzlich habe ich einen schwarzen Hintergrund hinter meiner NSScrollView. Ich habe versucht, die visuelle Effektansicht zu untergliedern, um die drawRect Methode zu überschreiben, so dass ich meinen eigenen Hintergrund zeichnen kann, aber ich habe gerade gelernt, dass das nicht möglich oder empfohlen ist.

Wie erkenne ich, dass Transparenz reduzieren aktiviert ist und wie kann ich meine Scrollview dynamisch opak machen?

Antwort

6

Ich brauchte eine Weile, um es zu finden, aber es gibt eine Reihe neuer Methoden in NSWorkspace, mit denen Sie die Voreinstellungen für die neuen Eingabehilfen von OS X Yosemite herausfinden können. -[NSWorkspace accessibilityDisplayShouldReduceTransparency] ist die eine, die Sie wollen.

Wenn Sie auf NSWorkspaceAccessibilityDisplayOptionsDidChangeNotification hören, können Sie herausfinden, wann sich diese Einstellung ändert. Beachten Sie, dass Sie sich für diese Benachrichtigung unter der korrekten NSNotificationCenter, also [[NSWorkspace sharedWorkspace] notificationCenter], registrieren müssen.

1

Es scheint, als ob ich am Ende ein Elternteil überschrieben NSView, die alles enthält und eine Hintergrundfarbe dafür festlegen. Auf diese Weise wird NSVisualEffectView transparent, wenn Transparenz reduzieren aktiviert ist, und die Farbe, die ich erhalte, ist diejenige, die darunter sichtbar ist. Dies scheint vorerst gut zu funktionieren.

+0

Darüber hinaus habe ich den richtigen Weg gefunden, herauszufinden, ob die Lebendigkeit aktiviert ist, und das ist für dieses Flag zu überprüfen: 'self.effectiveAppearance.allowsVibrancy' – strangetimes

Verwandte Themen