J'ai une UIImageView que je veux ajouter une ombre derrière. Je souhaite que Apple ait cela comme propriété mais ils doivent rendre beaucoup de choses difficiles pour nous programmeurs, donc je dois poser cette question.
Il existe un moyen meilleur et plus simple de le faire. UIImageView hérite de UIView et possède donc une propriété de couche. Vous pouvez accéder aux propriétés d'ombre du calque et bam, vous avez une ombre.
Si vous avez UIImageView en tant qu'IBOutlet dans un fichier nib, vous pouvez simplement implémenter awakeFromNib, par exemple.
Objectif-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;
}
N'oubliez pas de #import "QuartzCore/CALayer.h"
Pour Swift, vous pouvez vous y prendre de plusieurs manières. Créez une extension de classe, une sous-classe ou une instance imageView. Quelle que soit la manière, le processus est le même pour modifier la propriété d'ombre des calques.
Swift
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
}
La chose la plus simple à faire est d'ajouter un calque d'ombre à votre image:
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];
Assurez-vous que "Clip Subviews" est désactivé pour la vue
Solution rapide avec extension. Le sous-classement n'est pas requis. Appelez myImage.addShadow()
à partir de viewDidLoad()
. Cela devrait fonctionner pour UIView
et 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
}
}
en plus de cela, si vous voulez créer une bordure et une ombre blanches, vous pouvez utiliser ce code:
//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];