Ich habe eine UIImageView, hinter der ich einen Schatten hinzufügen möchte. Ich wünschte, Apple hätte das als Eigentum, aber sie müssen uns Programmierern viele Dinge schwer machen, also muss ich diese Frage stellen.
75
Ich habe eine UIImageView, hinter der ich einen Schatten hinzufügen möchte. Ich wünschte, Apple hätte das als Eigentum, aber sie müssen uns Programmierern viele Dinge schwer machen, also muss ich diese Frage stellen.
Antworten:
Es gibt einen besseren und einfacheren Weg, dies zu tun. UIImageView erbt von UIView, sodass es eine Layereigenschaft hat. Sie können auf die Schatteneigenschaften der Ebene zugreifen und erhalten einen Schatten.
Wenn Sie UIImageView als IBOutlet für eine NIB-Datei haben, können Sie einfach die awakeFromNib implementieren, z
Ziel c
- (void)awakeFromNib { imageView.layer.shadowColor = [UIColor purpleColor].CGColor; imageView.layer.shadowOffset = CGSizeMake(0, 1); imageView.layer.shadowOpacity = 1; imageView.layer.shadowRadius = 1.0; imageView.clipsToBounds = NO; }
Vergiss es nicht
#import "QuartzCore/CALayer.h"
Für Swift können Sie auf mehrere Arten vorgehen. Erstellen Sie eine Klassenerweiterung, Unterklasse oder eine imageView-Instanz. Unabhängig davon ist der Vorgang beim Ändern der Schatteneigenschaft der Ebenen derselbe.
Swift 3
override func awakeFromNib() { super.awakeFromNib() imageView.layer.shadowColor = UIColor.purple.cgColor imageView.layer.shadowOffset = CGSize(width: 0, height: 1) imageView.layer.shadowOpacity = 1 imageView.layer.shadowRadius = 1.0 imageView.clipsToBounds = false }
quelle
imageView.clipsToBounds = NO;
oder der Schatten wird abgeschnitten.Am einfachsten ist es, Ihrer Bildansicht eine Schattenebene hinzuzufügen:
CALayer *layer = [CALayer layer]; CGRect bounds = self.bounds; layer.bounds = bounds; layer.position = CGPointMake(bounds.size.width / 2 + 3, bounds.size.height / 2 + 3); layer.backgroundColor = [UIColor colorWithWhite: 0.25 alpha: 0.55].CGColor; layer.zPosition = -5; [self.layer addSublayer: layer];
Stellen Sie sicher, dass "Clip-Unteransichten" für die Ansicht deaktiviert ist
quelle
Schnelle Lösung mit Erweiterung. Unterklassen sind nicht erforderlich. Anruf
myImage.addShadow()
vonviewDidLoad()
. Dies sollte fürUIView
und funktionierenUIImageView
.extension UIView { func addShadow() { layer.shadowColor = UIColor.black.cgColor layer.shadowOffset = CGSize(width: 0, height: 0) layer.shadowOpacity = 0.5 layer.shadowRadius = 5 clipsToBounds = false } }
quelle
Darüber hinaus können Sie diesen Code verwenden, wenn Sie weiße Ränder und Schatten erstellen möchten:
//shadow part imageView.layer.shadowColor = [UIColor blackColor].CGColor; imageView.layer.shadowOffset = CGSizeMake(0, 1); imageView.layer.shadowOpacity = 1; imageView.layer.shadowRadius = 1.0; //white border part [imageView.layer setBorderColor: [[UIColor whiteColor] CGColor]]; [imageView.layer setBorderWidth: 2.0];
quelle