web-dev-qa-db-fra.com

Quelle est la meilleure façon de créer une ombre derrière une UIImageView

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.

73
Jab

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
}
209
Alex Nguyen

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

10
Ben Gottlieb

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
    }
}
8
Boris Y.

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];
4
mturhan55