Ich zeichne ein benutzerdefiniertes Fenster, indem ich eine benutzerdefinierte Inhaltsansicht für das Fenster einstelle. Wenn ich die benutzerdefinierte Ansicht zeichne, gebe ich ihr abgerundete Ecken und einen schönen Umriss, um ein richtiges Fenster nachzuahmen.
Allerdings sehe ich einen weiteren 1 px Umriss um das Fenster herum, der von der Kante an den Ecken abweicht. Ich habe festgestellt, dass, wenn ich den Schatten abstelle, es weggeht, aber offensichtlich, da dies wie ein Fenster wirken will, brauche ich den Schatten. Hier ist, was ich mit der 1px-Gliederung meine:
Wie kann ich das verhindern?
BEARBEITEN
Code zum Zeichnen der Inhaltsansicht des benutzerdefinierten Fensters:
%Vor%Frag mich nicht, wie ich das bekommen habe, aber das wird dein Problem lösen.
Definieren Sie eine Kategorie für NSWindow
mit folgendem Inhalt:
HAFTUNGSAUSSCHLUSS: Dies überschreibt die interne Methode von NSWindow
, also benutze es auf eigene Gefahr. Es kann mit jedem OS X Update brechen.
Diese Linie, die den Fensterbereich konturiert, wird automatisch gezeichnet. Ich habe ein Fenster, in dem diese Linie genau um die unteren abgerundeten Ecken verläuft. Sie müssen das Fenster als undurchsichtig und die Hintergrundfarbe als transparent einrichten:
%Vor%Der irgendwo im contentView-drawRect: Sie tun
%Vor%Das sollte funktionieren.
Wie ich richtig verstehe, werden Schatten vom Windows Server gezeichnet. Wenn Sie benutzerdefiniertes NSWindow mit abgerundeten Ecken oder anderen nicht rechteckigen Formen zeichnen, zählt der Windows-Server diese transparenten Pixel nicht und lässt keinen Schatten darunter fallen.
Ich habe einen Hack entwickelt, um ein solches Verhalten zu vermeiden. Lass einfach einen zusätzlichen Schatten unter deinen Pfad fallen, etwa so:
%Vor%Idealerweise für ein perfektes Ergebnis muss ifink shadow den Fensterservern entsprechen.
Tags und Links objective-c macos cocoa nswindow shadow