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

Jab*_*Jab 73 iphone shadow uiimageview

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

Ale*_*yen 209

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

如果您将UIImageView作为nib文件的IBOutlet,您可以实现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;
}
Run Code Online (Sandbox Code Playgroud)

别忘了 #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
}
Run Code Online (Sandbox Code Playgroud)

  • 您还可能需要`imageView.clipsToBounds = NO;`或阴影将被剪掉. (29认同)
  • 你还需要#import"QuartzCore/CALayer.h" (18认同)
  • @DerekDahmer你必须将imageView添加为另一个视图的子视图,然后再应用阴影,然后剪切imageView而不是容器视图.我找不到其他方法来处理这类事情. (5认同)
  • 添加imageView.layer.shouldRasterize = YES; 加快处理速度 (5认同)
  • 对使用宽高比适合或填充的图像不起作用 (3认同)

Ben*_*ieb 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];
Run Code Online (Sandbox Code Playgroud)

确保视图的"剪辑子视图"已关闭


Bor*_* Y. 8

带扩展的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
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 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];
Run Code Online (Sandbox Code Playgroud)