视图添加阴影的常见问题解析

如何给视图(UIView)添加阴影,相信大家都已经轻车熟路;参考代码如下:

contentView.layer.shadowColor = [UIColor redColor].CGColor; //颜色
contentView.layer.shadowRadius = 4.0f; //半径
contentView.layer.shadowOffset = CGSizeMake(3, 3); //偏移
contentView.layer.shadowOpacity = 1.0f; //透明度
常见问题
  1. 阴影不可见

    • 检查layer的masksToBounds属性是否为YES;
    • 检查阴影所属UIView的clipsToBounds属性是否为YES;

    原因: 视图外阴影的显示,需要超出视图本身区域;所以检测以上属性是否设置正确

  2. 子视图显示阴影


    ShadowInSubviews.png
    • 检查阴影所属UIView是否没有设置背景色(即背景色为clear color)
    • 检查阴影所属UIView的背景色alpha通道小于1

    shadowPath: The default value of this property is nil, which causes the layer to use a standard shadow shape. If you specify a value for this property, the layer creates its shadow using the specified path instead of the layer’s composited alpha channel.

    原因: 如果没有设置layer的shadowPath属性,阴影渲染会根据视图最终的alpha通道来决定阴影的路径;当父视图背景色有透明度,则所有的子视图也会阴影效果

  • 提高性能
    • 设置layer的shadowPath属性

    原因: 显式设定阴影的路径,可以避免Core Animation's的Off-screen渲染;如果没有设置,则需要离屏渲染计算出阴影的路径;

总结: 推荐用法
contentView.layer.shadowColor = [UIColor redColor].CGColor; //颜色
contentView.layer.shadowRadius = 4.0f; //半径
contentView.layer.shadowOffset = CGSizeMake(3, 3); //偏移
contentView.layer.shadowOpacity = 1.0f; //透明度
contentView.layer.shadowPath = CGPathCreateWithRect(CGRectMake(0, 0, 100, 100), NULL); //路径
contentView.clipsToBounds = YES;

如果使用Autolayout,可以在layoutSubviews或者viewDidLayoutSubviews方法中设置设置shadowPath;

参考资料:

欢迎补充阴影的常见问题

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Laye...
    小猫仔阅读 9,253评论 1 4
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,541评论 5 13
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,722评论 6 30
  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 11,508评论 0 13
  • 每个UIView有一个伙伴称为layer,一个CALayer。UIView实际上并没有把自己画到屏幕上;它绘制本身...
    shenzhenboy阅读 8,322评论 0 17

友情链接更多精彩内容