Ausschneiden von Schatten, die von CALayer.shadow erstellt wurden

9

Ich möchte einen Schatten um die OUTSIDE-Kante eines HOLLOW CGPath hinzufügen (diese beiden Wörter sind kritisch: außen + hohl :)).

Die Schattenimplementierung von Apple ermöglicht Ihnen nur "gefüllte" Schatten.

Also ... wie man den inneren Teil des Schattens selbst abschneidet? Wenn es sich um einen Render-Aufruf handeln würde, würde ich CGContextSetClip * -Methoden aufrufen, um es an den gewünschten Platz zu bringen ... aber ich kann nicht sehen, wie Sie es verstehen würden, da es weder ein Render-Aufruf noch ein CALayer selbst ist .

(eine unglückliche Konsequenz von Apple "versteckt" es als eine Reihe von magischen Variablen, denke ich?)

Hinweis: Dies ist nur iOS - IIRC auf Mac haben Sie direkten Zugriff auf die Filter, die zum Erstellen von Schatten verwendet werden, so dass Sie Ihre eigenen (willkürlichen) Schatten von Hand erstellen können.

UPDATE:

Ich habe herausgefunden, wie man mit dem Clip nur den INNEREN Teil des Schattens darstellen kann: setze die "layer.mask" als neue Ebene, die ein Klon der aktuellen Ebene ist (dh den gleichen Pfad) und setze den Pfad fillcolor zu allem mit vollem Alpha.

Das ist das Gegenteil von dem, was ich versuche. Wenn ich also einen Weg finden könnte, die Maskenebene Alpha zu spiegeln (0 wird 1, 1 wird 0), wäre ich da ...

    
Adam 19.03.2012, 18:17
quelle

1 Antwort

5

Angenommen, Sie haben eine Methode:

%Vor%

... dann tu das:

  1. Kopiere den Layer und erstelle "mask"
  2. Nimm Maske - selbe CGPath, erinnere dich - und ersetze seinen Pfad mit einem Pfad, der folgendes enthält:
    1. Die rect der gesamten Ebene
    2. MINUS der ursprüngliche Pfad
    3. (erreicht durch Verwendung der EO-Regel)
  3. legen Sie die Maske der ursprünglichen Ebene (die mit dem Schatten) als neue Ebene "Maske" fest

d. im Code:

%Vor%

NB: Das funktioniert tatsächlich, außer dass der Schatten ein wenig größer wird, als wenn ich nicht maskiert hätte. Na gut.

    
Adam 19.03.2012, 18:59
quelle

Tags und Links