Ich möchte mehrere Schlagschatten mit verschiedenen Opazitäten zu einer Ansicht hinzufügen. Die Spezifikationen für die Schatten sind wie folgt:
Ich kann all das mit CALayer
s gut machen. Hier ist der Code, mit dem ich gearbeitet habe (bitte beachte, dass ich noch nicht shadowPath
gesetzt habe, und werde es erst, wenn ich die Multiple-Shadows-Funktion funktioniere):
(Während dieser Code in Swift ist, vertraue ich darauf, dass er den meisten Cocoa / Objective-C-Entwicklern bekannt genug erscheint, um einen Sinn zu ergeben. Wissen Sie, dass layer
in diesem Zusammenhang self.layer
entspricht.)
Das Problem tritt jedoch auf, wenn ich versuche, für jeden Schatten verschiedene Opazitäten zu verwenden. Die Eigenschaft shadowOpacity
von layer
wird auf alle Unterschichten angewendet. Dies ist ein Problem, da ich alle brauche, um ihre eigene Schattenopazität zu haben. Ich habe versucht, die Deckkraft der einzelnen Ebenen auf den korrekten Wert zu setzen ( 0.04
, 0.12
usw.), aber dann wird die Deckkraft von 0.04
von layer
auf alle Sublayer angewendet. Also habe ich versucht, layer.shadowOpacity
auf 1.0
zu setzen, aber das hat alle Schatten schwarz gemacht. Ich habe auch versucht, clever zu sein und layer2.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.12).CGColor
zu machen, aber es wurde nur in Schwarz geändert, ohne Transparenz.
Ich nehme an, dass es irgendwie Sinn macht, dass die Schichten alle die gleiche Schattenopazität haben sollten. Aber was ist ein Weg, um das zu erreichen, unterschiedliche Opazitäten und alles (muss CALayer
nicht verwenden, wenn es einfacher ist, einen anderen Weg)?
Bitte antworten Sie nicht mit "nur ein Bild verwenden" : Egal wie gesund es ist, ich versuche es zu vermeiden. Just Humor mich.
Danke.
BEARBEITEN: Wie gewünscht, hier ist was ich bin: .
Der Schlüssel, der hinzugefügt werden muss, ist das Festlegen der Ebenen shadowPath
. Standardmäßig zeichnet Core Graphics einen Schatten um den sichtbaren Inhalt der Ebene. In Ihrem Code sind jedoch weder backgroundColor
noch bounds
für die Ebenen festgelegt, sodass die Ebenen tatsächlich leer sind.
Angenommen, Sie haben eine UIView-Unterklasse, können Sie sie folgendermaßen einrichten:
%Vor% Ich habe diesen Ansatz in einer Ansicht mit mehreren Schatten getestet und es hat wie erwartet funktioniert, sobald die shadowPath
für die Schattenschichten definiert wurde. Unterschiedliche Schattenfarben und Opazitäten haben ebenfalls funktioniert, aber Sie müssen bedenken, dass die oberen Ebenen in der Hierarchie die dahinter liegenden Ebenen überlappen. Wenn also die vordere Ebene einen dicken Schatten hat, können die anderen Schatten dadurch verdeckt werden. p>
Tags und Links ios cocoa-touch uiview quartz-core dropshadow