带角的 UIImageView 的阴影不可见

Posted

技术标签:

【中文标题】带角的 UIImageView 的阴影不可见【英文标题】:Shadow not visible for UIImageView with corner 【发布时间】:2017-08-22 13:53:49 【问题描述】:

我试图同时给图像添加角落和阴影。如果我删除但我不能显示阴影。我删除了masksToBonds,但后来我丢了角。如何解决?

_iconView.image = [UIImage imageNamed:cellObject.imageName];

_iconView.layer.cornerRadius = 30.0f;
_iconView.clipsToBounds = YES;

_iconView.layer.shadowRadius = 3.0f;
_iconView.layer.shadowColor = [UIColor blackColor].CGColor;
_iconView.layer.shadowOffset = CGSizeMake(0.0f, 1.0f);
_iconView.layer.shadowOpacity = 0.5f;
_iconView.layer.masksToBounds = NO;

【问题讨论】:

查看***.com/questions/40887532/… 答案很快。 UIView with rounded corners and drop shadow?的可能重复 @birdcage 不,这是一个 ios 答案。无论是用 Swift 还是 Objective-C 编写的,答案都是一样的。如果您无法在 YES 和 true 之间进行转换,那么这是 *** 无法解决的另一个问题。 【参考方案1】:

你可以设置shadowPath属性来跟踪iconView的路径,也可以设置它的圆角半径,像这样:

UIImageView * iv = [UIImageView new];
iv.frame = CGRectMake(0, 0, 100, 50);
iv.backgroundColor = [UIColor redColor];
iv.layer.cornerRadius = 10.0f;
iv.image = [UIImage imageNamed:@"settings-120.png"];
iv.layer.cornerRadius = 10.0f;
iv.layer.shadowColor = [UIColor blackColor].CGColor;
iv.layer.shadowOffset = CGSizeZero;
iv.layer.shadowRadius = 3.0f;
iv.layer.shadowOpacity = 1.0f;
iv.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:iv.bounds cornerRadius:iv.layer.cornerRadius].CGPath;
[self.view addSubview:iv];

如果您想使用 UIViewContentModeScaleAspectFill 设置图像(并且不让它溢出),然后将其嵌套在支架内,在支架上设置阴影并剪辑 imageView:

UIView * holder = [UIView new];
holder.frame = CGRectMake(0, 0, 100, 50);
holder.layer.cornerRadius = 10.0f;
holder.layer.shadowColor = [UIColor whiteColor].CGColor;
holder.layer.shadowOffset = CGSizeZero;
holder.layer.shadowRadius = 3.0f;
holder.layer.shadowOpacity = 1.0f;
holder.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:holder.bounds cornerRadius:holder.layer.cornerRadius].CGPath;
[self.view addSubview:holder];

UIImageView * iv = [UIImageView new];
iv.frame = holder.bounds;
iv.layer.cornerRadius = holder.layer.cornerRadius;
iv.image = [UIImage imageNamed:@"settings-120.png"];
iv.contentMode = UIViewContentModeScaleAspectFill;
iv.clipsToBounds = true;
[holder addSubview:iv];

【讨论】:

以上是关于带角的 UIImageView 的阴影不可见的主要内容,如果未能解决你的问题,请参考以下文章

带角的 jQueryUI 可拖动棒

带角覆盖的量角器/硒,其他元素会收到点击

仅 UIImageView 顶部和底部的内部阴影(目标 C)

使用 UITableViewAutomaticDimension 时 UIImageView 拉伸不正确

UIImageView 在 UITableViewCell 中不可见

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