76

我有一个 UIImageView 我想在后面添加一个阴影。我希望苹果有这个属性,但他们不得不让我们程序员做很多事情,所以我需要问这个问题。

4

5 回答 5

218

有一种更好、更简单的方法可以做到这一点。UIImageView 继承自 UIView 所以它有一个 layer 属性。您可以访问图层的阴影属性和 bam,您有一个阴影。

如果你有 UIImageView 作为 IBOutlet 到一个 nib 文件,你可以只实现 awakeFromNib 例如

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

不要忘记#import "QuartzCore/CALayer.h"


对于 Swift,您可以通过多种方式进行操作。创建类扩展、子类或 imageView 实例。无论哪种方式,修改图层阴影属性的过程都是相同的。

斯威夫特 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
}
于 2010-10-01T23:14:46.490 回答
11

最简单的做法是在图像视图中添加一个阴影层:

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

确保视图的“剪辑子视图”已关闭

于 2010-01-11T20:02:12.137 回答
9

带有扩展的 Swift 解决方案。不需要子类化。myImage.addShadow()从调用viewDidLoad()。这应该适用于UIViewUIImageView

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
    }
}
于 2017-02-10T13:36:39.120 回答
5

除此之外,如果您想制作白色边框和阴影,您可以使用该代码:

//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];
于 2012-05-09T13:59:09.737 回答
0

斯威夫特 5.x

profileImageView.layer.cornerRadius = profileImageView.frame.size.width/2
profileImageView.clipsToBounds = false
profileImageView.layer.shadowColor = UIColor.black.cgColor
profileImageView.layer.shadowOpacity = 0.7
profileImageView.layer.shadowOffset =  CGSize(width: 2, height: 2)
profileImageView.layer.shadowRadius = 10
于 2021-02-08T15:24:58.497 回答