Mehrere Schlagschatten auf Single View iOS

8

Ich möchte mehrere Schlagschatten mit verschiedenen Opazitäten zu einer Ansicht hinzufügen. Die Spezifikationen für die Schatten sind wie folgt:

  • Y-Offset von 4 mit Unschärfe Radius von 1
  • Y-Versatz von 10 mit Unschärfe Radius von 10
  • Y-Offset von 2 mit Unschärferadius von 4
  • Blur Radius von 1, Breite von 1 (keine Offsets, müssen wahrscheinlich 4 verschiedene Schatten sein)

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):

%Vor%

(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: .

    
Aehmlo 12.08.2014, 03:39
quelle

1 Antwort

0

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>     

maxkonovalov 08.02.2018 08:52
quelle