在UIImageView后面创建阴影的最佳方法是什么

时间:2010-01-11 19:51:00

标签: iphone uiimageview shadow

我有一个UIImageView,我想在后面添加一个阴影。我希望苹果把它作为一种财产,但是他们必须为我们的程序员做很多事情,所以我需要问这个问题。

5 个答案:

答案 0 :(得分:209)

有一种更好,更简单的方法。 UIImageView继承自UIView,因此它具有图层属性。你可以访问图层的阴影属性和bam,你有一个阴影。

如果您将UIImageView作为nib文件的IBOutlet,您可以实现awakeFromNib e.g。

<强>目标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实例。无论哪种方式,修改图层阴影属性的过程都是一样的。

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
}

答案 1 :(得分:10)

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

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

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

答案 2 :(得分:7)

带扩展名的快速解决方案。不需要子类化。从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
    }
}

答案 3 :(得分:4)

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

//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 :(得分: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