iOS UI 开发中,我们已接触过不少 layer 相关设置,如常见设置按钮的圆角效果

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.layer.cornerRadius = 5.0;
button.layer.masksToBounds = YES;

还有边框、阴影也都可以通过 CALayer 相关属性直接设置。今天要说的是一个渐变效果,举个栗子,在一些直播中我们可以看到聊天室上边有个透明度渐变效果,如下

这个时候没有办法直接通过 layer 属性配置出这种效果,而且 layer 配置的效果只能作用于当前视图,无法作用到子视图上,在这里透明度渐变实际需要作用到聊天室的 cell 上,即它的子视图,所以此时需要通过另一种方式设置。

iOS QuartzCore 框架中提供了一个 CAGradientLayer 类(CALayer 子类)用来设置渐变色,同时 UIView 视图类的 layer 属性也有个 mask 蒙层属性。官方的解释

/* A layer whose alpha channel is used as a mask to select between the* layer's background and the result of compositing the layer's* contents with its filtered background. Defaults to nil. When used as* a mask the layer's `compositingFilter' and `backgroundFilters'* properties are ignored. When setting the mask to a new layer, the* new layer must have a nil superlayer, otherwise the behavior is* undefined. Nested masks (mask layers with their own masks) are* unsupported. */
图层,其alpha通道用作遮罩,以在图层的背景和将其内容与其过滤的背景合成的结果之间进行选择。 默认为nil。 当用作蒙版时,图层的“ compositingFilter”和“ backgroundFilters”属性将被忽略。 将蒙版设置为新层时,新层必须具有nil超级层,否则行为是不确定的。 不支持嵌套蒙版(具有自己的蒙版的蒙版层)。

至此,已有比较完整的解决思路,另外要考虑下 tableview 的滚动问题,所以 CAGradientLayer 还不能直接添加到 tablview 上,需要添加它的下层视图上。直接上代码

/// 渐变蒙层
self.gradientLayer = [CAGradientLayer layer];
self.gradientLayer.startPoint = CGPointMake(0, 0); //渐变色起始位置
self.gradientLayer.endPoint = CGPointMake(0, 0.1); //渐变色终止位置
self.gradientLayer.colors = @[(__bridge id)[UIColor.clearColor colorWithAlphaComponent:0].CGColor, (__bridge id) [UIColor.clearColor colorWithAlphaComponent:1.0].CGColor];
self.gradientLayer.locations = @[@(0), @(1.0)]; // 对应colors的alpha值
self.gradientLayer.rasterizationScale = UIScreen.mainScreen.scale;///  添加蒙层效果的图层
self.tableViewBackgroundView = [[UIView alloc] init];
self.tableViewBackgroundView.backgroundColor = UIColor.clearColor;
[self addSubview:self.tableViewBackgroundView];
self.tableViewBackgroundView.layer.mask = self.gradientLayer;self.tableView = [[UITableView alloc] init];
self.tableView.backgroundColor = UIColor.clearColor;
self.tableView.scrollEnabled = NO;
self.tableView.allowsSelection =  NO;
self.tableView.showsVerticalScrollIndicator = NO;
self.tableView.showsHorizontalScrollIndicator = NO;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.tableViewBackgroundView addSubview:self.tableView];
- (void)layoutSubviews {[super layoutSubviews];CGFloat tableViewHeight = 156;self.tableViewBackgroundView.frame = CGRectMake(15, CGRectGetMinY(self.textAreaView.frame)-tableViewHeight-15, 234, tableViewHeight);self.gradientLayer.frame = self.tableViewBackgroundView.bounds;
}

喜欢的话点个赞吧~

iOS UI 之聊天室渐变蒙层效果相关推荐

  1. android 给图片蒙上蒙层_Android 新手引导蒙层效果实现代码示例

    先上效果图: 这个效果一开始我是想直接让UI给个切图,后来发现这样不行,适配很差,达不到效果.所以就自己动手写代码,其实思路也很简单:在这个布局的父布局上面再手动添加一个view(通常LinearLa ...

  2. 为App界面添加蒙层效果

    最近产品需要开发一个新的功能,当App新版本第一次打开一个界面时,为改界面添加蒙层效果,效果图如下: 可以考虑: 在改页面的布局文件中添加一个透明的布局文件,当APP新版本第一次打开该页面时显示该透明 ...

  3. iOS直播间聊天室遇到的问题

    Question: 1.刷新直播间消息机制该用哪种方法?哪一种更加合适? 2.聊天室该如何图文混排? 3.聊天室出现特殊字符临界点不换行?高度计算错误? 4.聊天室该如何加载网络图片? 5.聊天室如何 ...

  4. android直播聊天室图文混排效果,仿抖音直播聊天室换行内容TextView+ReplacementSpan...

    一.抖音聊天室文本,看似简单并非简单 抖音文本换行. 二.实现方案TextView + ReplacementSpan 方案思路 利用span原理,继承ReplacementSpan,自定义VIewS ...

  5. 【iOS】中间透明的引导蒙层

    需求 如图口袋蜜蜂app一键海报的新手指引图,需求是遮罩层中间透明的,把底层的第一张海报显示出来,如图: 实现 通过UIBezierPath和CAShapeLayer绘制一张中间为透明的黑色半透明遮罩 ...

  6. 【干货】直播聊天室详细分解,让你一眼学会快速搭建!

    直播聊天室 为方便开发者了解和接入融云直播聊天室,本文将介绍融云直播聊天室功能特点.主要构成及常见功能的解决方案. 产品介绍 融云直播聊天室,是专门为视频直播业务提供的一个产品.主要特点是: 丰富的聊 ...

  7. 微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路

    本文由微信开发团队工程师" kellyliang"原创发表于"微信后台团队"公众号,收录时有修订和改动. 1.引言 随着直播和类直播场景在微信内的增长,这些业务 ...

  8. 千万同时在线直播聊天室架构演进

    以下内容转载自 https://www.toutiao.com/i6940139685289132582/ 腾讯技术工程2021-03-16 18:02:00 作者:kellyliang 聊天室概述 ...

  9. 微信直播聊天室架构演进

    聊天室概述 随着直播和类直播场景在微信内的增长,业务对临时消息通道的需求日益增长,聊天室组件应运而生.聊天室组件是一个基于房间的临时消息信道,主要提供消息收发.在线状态统计等功能. 1500w在线的挑 ...

最新文章

  1. 如何更新 Linux 的符号链接
  2. uml 时序图_设计模式-UML
  3. 后台运行定位,音频,网络电话
  4. nullptr was not declared怎么解决_剑桥少儿英语考试语法怎么学?一套《Grammer Friends和语法做朋友》:这样学语法,孩子学得会、记得住!...
  5. 【OJ】洛谷循环结构题单题解锦集
  6. 第一届LCI workshop @ ICCV 2019, 欢迎投稿
  7. php安装扩展igbinary
  8. Excel Spreadsheet 转换web HTML 5 展示
  9. php学生信息管理系统(源码)
  10. VC6.0建立新工程的步骤---解决win11使用不了VC6的方法以及自用版本VC6下载
  11. 在线教育高保真小程序Axure原型模板
  12. 【第52期】游戏策划:应聘的误区你信了几个?
  13. 一文读懂Faster RCNN(大白话,超详细解析)
  14. java: 读取D:\repository\org\lz4\lz4-java\1.7.1\lz4-java.jar时出错; error in opening zip file解决方案
  15. 腾讯云HiFlow场景连接器7月最受欢迎新应用模版推荐
  16. 用pandas的isin,~+isin筛选数据
  17. OpenGL的函数(GL)
  18. [ctf.show.reverse] 来一个派森,好好学习天天向上
  19. 大数据(一) --大数据概述
  20. html中visibility属性,(CSS) 不同浏览器对table中visibility属性显示的不同

热门文章

  1. soapUI模拟推送报文时提示:前言中不允许有内容
  2. uni-app - 日历选择器组件(支持日期 “范围选择“ 多选 / 支持单选日期 / 自定义默认选中时间 / 弹框式 / 支持农历 )完美兼容 H5 APP 小程序,最好用的教程完整源代码插件!
  3. Qt TCP客户端无法连接服务器
  4. 思考、创新、坚持——阿里做了七年前端,我的成长经验分享
  5. 可调电阻封装图_电子元器件封装名称和图形,工业美感十足(推荐收藏)
  6. spring context 学习总结(注解功能,配置文件,jar包)
  7. 【Codecs系列】FFmpeg中mpeg2编解码器的提取和编译测试
  8. 2018,程序员要搭配这40条编程箴言!!!
  9. java 保存数据_java数据存储
  10. Android ContentProvider基础应用