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.
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
}
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
Schnelle Lösung mit Erweiterung. Unterklassen sind nicht erforderlich. Anruf myImage.addShadow()
von viewDidLoad()
. Dies sollte für UIView
und funktionieren UIImageView
.
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
}
}
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];