NSWindow Schattenumriss

9

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%     
Joshua 29.05.2011, 12:23
quelle

5 Antworten

3

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:

%Vor%

HAFTUNGSAUSSCHLUSS: Dies überschreibt die interne Methode von NSWindow , also benutze es auf eigene Gefahr. Es kann mit jedem OS X Update brechen.

    
Mihhail 06.09.2015 18:45
quelle
1

Sie müssen das Fenster anweisen, seinen Schatten neu zu berechnen, indem Sie ihm -invalidateShadow senden.

    
alastair 01.06.2011 16:00
quelle
1

Versuchen Sie:

%Vor%     
Olof 08.03.2012 18:33
quelle
0

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.

    
febeling 13.07.2011 19:29
quelle
0

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.

    
Vadim 23.05.2012 08:31
quelle