What is the best way to create a shadow behind a UIImageView

前端 未结 4 1937
再見小時候
再見小時候 2020-11-30 18:21

I have a UIImageView that I want to add a shadow behind. I wish that apple had that as a property but they have to make lots of things hard for us programmers so I need to a

相关标签:
4条回答
  • 2020-11-30 18:37

    The simplest thing to do is add a shadow layer to your image view:

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

    Be sure "Clip Subviews" is turned off for the view

    0 讨论(0)
  • 2020-11-30 18:39

    in additional to that, if you want to make white border and shadow you can use that 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];
    
    0 讨论(0)
  • 2020-11-30 18:42

    There's a better and easier way to do this. UIImageView inherits from UIView so it has a layer property. You can access the layer's shadow properties and bam, you got a shadow.

    If you have the UIImageView as an IBOutlet to a nib file, you can just implement the awakeFromNib e.g.

    Objective-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;
    }
    

    Don't forget to #import "QuartzCore/CALayer.h"


    For Swift, you can go about it multiple ways. Create a class extension, subclass, or an imageView instance. Whichever the way, the process is the same in modifying the layers shadow property.

    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
    }
    
    0 讨论(0)
  • 2020-11-30 18:46

    Swift solution with extension. Subclassing is not required. Call myImage.addShadow() from viewDidLoad(). This should work for UIView and 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
        }
    }
    
    0 讨论(0)
提交回复
热议问题