iOS 阴影(shadow)
1. 简单阴影
我们给layer设置了shadowOpacity后就能得到一个简单的阴影
view.layer.shadowOpacity = 1;
shadowOpacity设置了阴影的不透明度,取值范围在0~1
这里shadow有一个默认值
shadowOffset = CGSizeMake(0, -3)
shadowRadius = 3.0
注意:如果view没有设置背景色阴影也是不会显示的
2. 阴影属性
layer中与阴影相关的属性有以下几个
(CGColorRef *) shadowColor//阴影颜色
(float) shadowOpacity//阴影透明度
(CGSize) shadowOffset//阴影偏移量
(CGFloat) shadowRadius//模糊计算的半径
(CGPathRef *) shadowPath//阴影路径
3. shadowColor
- (void)p_setupSubViews {self.view.backgroundColor = [UIColor whiteColor];[self p_setupViewWithY:100 shadowColor:[UIColor redColor]];[self p_setupViewWithY:170 shadowColor:[UIColor blueColor]];[self p_setupViewWithY:240 shadowColor:[UIColor yellowColor]];
}- (void)p_setupViewWithY:(CGFloat)y shadowColor:(UIColor *)shadowColor {UIView *view = [[UIView alloc] initWithFrame:CGRectMake(30, y, [UIScreen mainScreen].bounds.size.width - 60, 50)];view.backgroundColor = [UIColor whiteColor];[self.view addSubview:view];view.layer.shadowOpacity = 1;view.layer.shadowColor = shadowColor.CGColor;
}
4. shadowOpacity
- (void)p_setupSubViews {self.view.backgroundColor = [UIColor whiteColor];[self p_setupViewWithY:100 shadowOpacity:0.2];[self p_setupViewWithY:170 shadowOpacity:0.6];[self p_setupViewWithY:240 shadowOpacity:0.9];
}- (void)p_setupViewWithY:(CGFloat)y shadowOpacity:(float)shadowOpacity {UIView *view = [[UIView alloc] initWithFrame:CGRectMake(30, y, [UIScreen mainScreen].bounds.size.width - 60, 50)];view.backgroundColor = [UIColor whiteColor];[self.view addSubview:view];view.layer.shadowOpacity = shadowOpacity;
}
5. shadowOffset
- (void)p_setupSubViews {self.view.backgroundColor = [UIColor whiteColor];[self p_setupViewWithY:100 shadowOffset:CGSizeMake(0, 0)];[self p_setupViewWithY:170 shadowOffset:CGSizeMake(5, 0)];[self p_setupViewWithY:240 shadowOffset:CGSizeMake(-5, 0)];[self p_setupViewWithY:310 shadowOffset:CGSizeMake(0, 5)];[self p_setupViewWithY:380 shadowOffset:CGSizeMake(0, -5)];[self p_setupViewWithY:450 shadowOffset:CGSizeMake(5, 5)];[self p_setupViewWithY:520 shadowOffset:CGSizeMake(-5, -5)];
}- (void)p_setupViewWithY:(CGFloat)y shadowOffset:(CGSize)shadowOffset {UIView *view = [[UIView alloc] initWithFrame:CGRectMake(30, y, [UIScreen mainScreen].bounds.size.width - 60, 50)];view.backgroundColor = [UIColor whiteColor];[self.view addSubview:view];view.layer.shadowOpacity = 1;view.layer.shadowOffset = shadowOffset;
}
6. shadowRadius
shadowRadius其实可以理解为阴影的宽度
- (void)p_setupSubViews {self.view.backgroundColor = [UIColor whiteColor];[self p_setupViewWithY:100 shadowRadius:0];[self p_setupViewWithY:170 shadowRadius:3.0];[self p_setupViewWithY:240 shadowRadius:10.0];}- (void)p_setupViewWithY:(CGFloat)y shadowRadius:(CGFloat)shadowRadius {UIView *view = [[UIView alloc] initWithFrame:CGRectMake(30, y, [UIScreen mainScreen].bounds.size.width - 60, 50)];view.backgroundColor = [UIColor yellowColor];[self.view addSubview:view];view.layer.shadowOpacity = 1;view.layer.shadowOffset = CGSizeMake(0, 0);view.layer.shadowRadius = shadowRadius;
}
7. shadowPath
- (void)p_setupSubViews {self.view.backgroundColor = [UIColor whiteColor];[self p_setupViewWithY1:100];[self p_setupViewWithY2:170];[self p_setupViewWithY3:240];//贝塞尔曲线未闭合
}- (void)p_setupViewWithY1:(CGFloat)y {UIView *view = [[UIView alloc] initWithFrame:CGRectMake(30, y, [UIScreen mainScreen].bounds.size.width - 60, 50)];view.backgroundColor = [UIColor whiteColor];[self.view addSubview:view];view.layer.shadowOpacity = 1;UIBezierPath *path = [UIBezierPath bezierPathWithRect:view.bounds];view.layer.shadowPath = path.CGPath;
}- (void)p_setupViewWithY2:(CGFloat)y {UIView *view = [[UIView alloc] initWithFrame:CGRectMake(30, y, [UIScreen mainScreen].bounds.size.width - 60, 50)];view.backgroundColor = [UIColor whiteColor];[self.view addSubview:view];view.layer.shadowOpacity = 1;UIBezierPath *path = [UIBezierPath bezierPath];[path moveToPoint:CGPointMake(0, 0)];[path addLineToPoint:CGPointMake(0, view.frame.size.height + 10)];[path addLineToPoint:CGPointMake(view.frame.size.width, view.frame.size.height + 10)];[path addLineToPoint:CGPointMake(view.frame.size.width, 0)];[path addLineToPoint:CGPointMake(0, 0)];view.layer.shadowPath = path.CGPath;
}- (void)p_setupViewWithY3:(CGFloat)y {UIView *view = [[UIView alloc] initWithFrame:CGRectMake(30, y, [UIScreen mainScreen].bounds.size.width - 60, 50)];view.backgroundColor = [UIColor whiteColor];[self.view addSubview:view];view.layer.shadowOpacity = 1;view.layer.shadowOffset = CGSizeMake(0, 0);UIBezierPath *path = [UIBezierPath bezierPath];[path moveToPoint:CGPointMake(-5, 0)];[path addLineToPoint:CGPointMake(-5, view.frame.size.height)];[path addLineToPoint:CGPointMake(view.frame.size.width, view.frame.size.height)];[path addLineToPoint:CGPointMake(view.frame.size.width, 0)];view.layer.shadowPath = path.CGPath;
}
当用bounds设置path时,看起来的效果与只设置了shadowOpacity一样
但是添加了shadowPath后消除了离屏渲染问题
微信公号TIGERXXXX后台回复636T7获取demo源码
iOS 阴影(shadow)相关推荐
- iOS 圆角cornerRadius、边框border、阴影Shadow
圆角cornerRadius 先看一下官网解释 Setting the radius to a value greater than 0.0 causes the layer to begin dra ...
- 布局阴影shadow的制作
布局阴影shadow的制作 最近的项目,因为是和书籍有关,所以UI和我商量时问我 能不能在书架显示的给每本书(item)加一下阴影,我说 可以啊,因为CardView有显示阴影的属性,应该很方便 .但 ...
- android bitmap 阴影,Android编程之阴影(Shadow)制作方法
本文实例讲述了Android编程之阴影(Shadow)制作方法.分享给大家供大家参考,具体如下: 先看运行效果图如下: 阴影制作:包括各种形状(矩形,圆形等等),以及文字等等都能设置阴影. 阴影制作是 ...
- Android 自定义阴影Shadow颜色,大小等样式
最近在项目碰到一个比较头疼的项目,设计师需要给ui图中的一些按钮之类的东西添加阴影.乍一看设计图,这没啥嘛,咱们Android中不是有这个属性嘛,于是撸起袖子开搞: <TextViewandro ...
- web阴影shadow练习
练习题目 完成一下图片的实现过程: 鼠标点击显示阴影. 实现代码 html代码如下: <!DOCTYPE html> <html lang="en"> &l ...
- Android:自定义Shape 加上阴影shadow之方法
直接用layer-list来实现,在项目 res->drawable中创建一个xml,如果列表中有layer-list选择的话直接选择创建,如果没有的话就随意(似乎4.0以下没有 layer-l ...
- iOS-学习资源看我就够了
iOS学习视频及资料 懒人demo大全更新至4.0版 (oc + swift) 史上最全iOS 开发工具集合 笔试面试 iOS-笔试面试总结 网络通信 <iOS 对 HTTPS 证书链的验证&g ...
- U3D 平行光阴影细节 Directional Shadow Details
Desktop This page explains shadows from Directional lights in detail. 此页面详细介绍了平行光阴影. Directional lig ...
- Directional Shadow Details 平行光阴影细节
This page explains shadows from Directional lights in detail. 此页面详细介绍了平行光阴影. Directional lights are ...
最新文章
- OpenCL,OpenGL编译
- 机器学习:线性回归简单有效,但是千万不要踩到雷区!
- JAVA入门到精通-网络编程补充和QQ案例
- Java——SAX生成XML文件
- 网页瀑布流效果实现的几种方式
- Perl函数pack/unpack(二进制读写)
- 想服务器不宕机,你了解Linux“体检”指标吗?
- Android NDK的文件夹
- python任务调度平台 界面_分布式任务调度平台XXL-JOB搭建教程
- python线性链表_线性表 (单链表、循环链表-python实现)
- 365家装智选联盟:为什么说不要在冬天装修?
- 易鲸捷钱库新特性之SQL级别HINT功能初见
- 【c++随笔】MinGW32编译环境实现DLL的创建与调用实例
- Excel:列的顺序颠倒(d-a列变成a-d列)
- 苹果手机连接Windows电脑导入照片出现重复
- juniper防火墙软件升级
- 阿里实名认证Java版(详细教程)
- 西部学刊杂志西部学刊杂志社西部学刊编辑部2022年第22期目录
- 用turtle模块画小猪佩奇
- 在Elasticsearch使用URI花式搜索