在UIImageView背后创build阴影的最佳方法是什么?

我有一个UIImageView,我想添加一个阴影。 我希望苹果有这样的属性,但是他们必须为我们的程序员做很多事情,所以我需要问这个问题。

有一个更好,更简单的方法来做到这一点。 UIImageView从UIViewinheritance,所以它有一个图层属性。 你可以访问图层的阴影属性和巴姆,你有一个阴影。

如果您将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,你可以采取多种方式。 创build一个类扩展,子类或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 } 

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

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

确保视图的“剪辑子视图”已closures

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

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

具有扩展的Swift解决scheme。 子类化不是必需的。 从viewDidLoad()调用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 } } 

UIView设置阴影

和addSubview:你的imageView