2014-02-25 6 views
6

Ich habe eine UIImageView von denen ich das Bild dynamisch (von einer URL). Die Bilder können beliebige Größen/Seitenverhältnisse haben. Ich setze contentMode auf Aspect Fill und Ansichtslayer clipsToBounds bis YES, und es wird korrekt angezeigt. Ich möchte jedoch auch Schatten unter der Bildansicht anzeigen. Wenn ich Schatten auf der Ebene der Bildansicht festlege, muss ich clipsToBounds auf NO einstellen, damit der Schatten angezeigt wird, wodurch die blutenden Teile des Bildes aus der Ansicht angezeigt werden. Wie kann ich die Größe der Bildansicht konstant halten (Aspekt-gefüllt) und den Schatten gleichzeitig aktivieren?UIImageView Schatten und Aspect-Füllung zusammen

Eine Option kann das Erstellen eines Grafikkontextes und das erneute Zeichnen des Bildes in diesen Kontext beinhalten, ein Bild mit dem gewünschten Seitenverhältnis zu erhalten und dieses Bild als Bildansicht zu setzen, aber das ist zusätzliche Verarbeitung/Verschwendung von CPU/GPU und Normalzeit (besonders wenn ich eine große Anzahl von Bildansichten mit großen Bildern habe). Eine andere Option kann das Erstellen einer leeren Ansicht in der gleichen Größe meiner Bildansicht, das Einfügen unterhalb meiner Ansicht in meine Superansicht, das dynamische Verknüpfen mit der Ansicht mithilfe von Abhängigkeiten und das Aktivieren von Schatten auf der Ebene dieser Ansicht umfassen. Dazu gehört auch das Erstellen einer zusätzlichen Ansicht nur für Schatten. Wahrscheinlich eine bessere/effizientere Lösung als die erste, aber immer noch zusätzliche Arbeit (CPU-weise).

Gibt es eine Option, die keine zusätzliche Arbeit erfordert, die unter meiner Bedingung sowohl Schatten- als auch Aspekt-Anpassung ermöglichen kann?

Antwort

1

Eine Lösung, die ich optimal glauben ist im Vergleich zu Ihrer zweiten Option,

Wenn vorausgesetzt, Sie wollen einfach nur das Bild zeigen und keine Anwenderwechsel haben auf it.You zwei CALayer Fällen ist es zu erreichen, verwenden können.

Wenn Sie Benutzerinteraktion auch drüber haben wollen, dann eine UIView und eine CALayer.

Mit zwei CALayer instances->

  • Erstellen Sie zwei Schichten. Eine Ebene speichert und zeigt Ihr Bild mit maskToBounds = YES an. Sie setzen ein Bild auf diese Ebene mit der contents property.
  • Und fügen Sie die obige Schicht als subLayer zum zweiten CALayer, auf dem Sie Schatten hinzufügen und clipToBounds = YES.

Das obige wird von Apple vorgeschlagen. In ihren eigenen Worten->

Wenn Sie einen Schatten möchten, aber auch Grenzen Maskierung verwenden möchten, verwenden Sie zwei Ebenen statt einer. Wenden Sie die Maske auf die Ebene an, die Ihren Inhalt enthält, und betten Sie diese Ebene anschließend in eine zweite Ebene derselben Größe ein, für die der Schatteneffekt aktiviert ist.

Überprüfen Sie diese link. Und suche nach dem oben genannten Begriff.

+0

Schöne Lösung, aber ich muss tatsächlich Interaktion haben. Es wird ein Effekt sein, um eine Ansicht zu ziehen (mit dem visuellen Hinweis, dass das Ziehen über die anderen über den Schatten "über" ist). –