首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ImageView未显示阴影

ImageView未显示阴影
EN

Stack Overflow用户
提问于 2013-04-12 20:19:38
回答 2查看 497关注 0票数 1

我正在尝试以以下方式在UIImageview上放置阴影:

代码语言:javascript
运行
复制
imageView.layer.shadowColor = [UIColor purpleColor].CGColor;
imageView.layer.shadowOffset = CGSizeMake(0, 1);
imageView.layer.shadowOpacity = 1;
imageView.layer.shadowRadius = 1.0;
imageView.clipsToBounds = NO;

但当UIImageview没有图像或背景色时,清晰的颜色阴影就不会显示出来。我甚至试着把透明的图像,但它仍然没有显示出来。请帮帮忙。

EN

回答 2

Stack Overflow用户

发布于 2013-04-12 20:30:59

如果图像视图不包含任何内容,则没有什么可以创建阴影。在这种情况下,您可以做的是定义一个显式的阴影矩形,而不是使用图像内容:

代码语言:javascript
运行
复制
CGPathRef shadowPath = CGPathCreateWithRect(imageView.bounds, NULL);
imageView.layer.shadowPath = shadowPath;
CGPathRelease(shadowPath);

事实上,当一般情况下添加阴影时,这种技术可以提供显著的性能提升,因为阴影不需要从图层内容动态计算。例如,您可以使用此技术来提高滚动性能。苹果在他们的一个WWDC视频中提到了这一点。

票数 5
EN

Stack Overflow用户

发布于 2013-04-12 20:46:31

如果你想要一个没有图像的阴影,那么可以选择explicit shadow rect的解决方案,老实说,我更喜欢这个答案,但作为替代,你可以尝试将maskToBOunds设置为NO并添加一个shadowPath,如下所示:

代码语言:javascript
运行
复制
 // Set your basic shadow properties.
 imageView.layer.shadowColor = [[UIColor purpleColor] CGColor];
 imageView.layer.shadowOpacity = 1.0f;
 imageView.layer.shadowOffset = CGSizeMake(0, 1.0f);
 imageView.layer.shadowRadius = 1.0;

 // Unmask from bounds
 imageView.layer.masksToBounds = NO;

 // Create a UIBezierPath
 UIBezierPath *path = [UIBezierPath bezierPathWithRect:imageView.bounds];

 // Set the UIBezierPath (path) to the shadowPath
 imageView.layer.shadowPath = [path CGPath];

预先警告,如果在很多事情上使用,这可能会影响性能,但如果在一两件事情上使用,我只注意到性能影响较小。

但就像我说的,我喜欢Mike Weller's解决方案,我非常喜欢它,所以我可能会自己修改代码。我只是提供了一个替代方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15971241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档