iOS 实现时间线列表效果
之前看到美团的订单详情页面很有特色,于是决定模仿一下这个效果。
其实就是简单的 TableView 技巧,下面我们就来一步一步实现它。
画个泡泡
首先到 Sketch 里画出气泡的效果
![](http://upload-images.jianshu.io/upload_images/1507403-3fcdf467a07bf7d4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
很简单,一个圆角矩形 + 一个三角形,然后 Union 操作一下,勾个边,done!
然后导出图片文件,添加到 Xcode 中。
设计 TableViewCell 原型
子类化一个新的 UITableViewCell
+ Xib,简单拖拽几个控件。
![](http://upload-images.jianshu.io/upload_images/1507403-129cb5eb5b662704.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我这里那两条线就没用 AutoLayout 了,太小了,回来直接用代码布局就行了。
拖线连几个 Outlet ,然后把气泡背景设置一下:
![](http://upload-images.jianshu.io/upload_images/1507403-5942e833a2182ed2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
事实上,气泡的背景图我制作了两个版本,一个是未选中的状态,另外一个是选中的状态,背景颜色不一样,所以我在 setHighlighted(:_, :_)
这个函数中进行设置,其他的保持默认即可。
然后在 ViewController 中随便做一些假数据,先看看效果。
![](http://upload-images.jianshu.io/upload_images/1507403-d683568877d3014c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
哈哈,已经初具雏形了。但是还有一点问题:
- 底部的线是断掉的,并且颜色不对
- 下拉时上边的线也会断掉
那么下面我们就来修复这些问题。
完善细节效果
这里我的思路是在 ViewController 中再添加两个 View,并且监听 TableView 的滚动,然后动态调节两个 View 的位置。
首先声明两个新 View:
![](http://upload-images.jianshu.io/upload_images/1507403-166bfca8676a423f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
然后修正线条的颜色:
![](http://upload-images.jianshu.io/upload_images/1507403-dd66464f52679442.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我在 tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
中获取到 Cell 中线条的颜色,这样我们随时修改 Cell 中的颜色,这里就会自动变换,而不用 Hardcode 。
然后是比较困难的线条位置调整,我们需要得到 Cell 中线条的位置,让其 x 坐标和宽度一致,y 坐标和高度动态调整。
首先解决 x 坐标和宽度:
![](http://upload-images.jianshu.io/upload_images/1507403-ec5e6892344e69ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
还是在 willDisplay 的方法中,我们用到了 convertPoint 方法进行坐标系变换,就是将线条在 Cell 中的坐标映射到它应该在 SuperView 中的坐标。
然后解决 y 坐标和高度:
![](http://upload-images.jianshu.io/upload_images/1507403-bd76d199198cc74f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
因为要动态调整,所以我们监听滚动事件,并在其中计算各个坐标。有关这个公式的推导大家可以看看下拉刷新里公式的推导,它们是一致的。
到这里我们就基本完成这个效果了,看看怎么样吧:
![](http://upload-images.jianshu.io/upload_images/1507403-3cf5472d0f3188c6.gif?imageMogr2/auto-orient/strip)
小提醒
不要在 UITableViewController
中添加自己的 Subview ,因为它的 view
属性就是 TableView,如果添加 Subview,它们会一起滚动,虽然 WWDC 中也介绍过怎么处理,但毕竟太麻烦,所以我还是推荐大家直接用 UIViewController + TableView 来处理这类比较复杂的效果。
Have fun!!
原文链接:http://www.jianshu.com/p/2504f2989556
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
iOS 实现时间线列表效果相关推荐
- 大佬教你Android如何实现时间线效果
背景 这天下班前,老板找到小庄:有个页面要优化,小需求,你跟进一下. 小庄:好的老板! 他看了看时间,忐忑地翻出原型,看到了这样一个页面: 思索片刻后,小庄熟练地打开了某搜索引擎,没有找到合适的轮子, ...
- RecyclerView列表控件漂亮时间线实现
时间都去哪了:时间你走慢一点吧 很多软件中都有时间线的东西,比如天气,计划,旅游等时间线最多了:具体实现方式很多,在本篇文章中讲解一种自定义View封装的方式实现时间线效果,PS:这也是面试中也时常会 ...
- android 日程安排view,RecyclerView 列表控件中简单实现时间线
时间 时间,时间,时间啊:走慢一点吧- 看见很多软件中都有时间线的东西,貌似天气啊,旅游啊什么的最多了:具体实现方式很多,在本篇文章中讲解一种自定义View封装的方式. 效果 先来看看效果. 分析 软 ...
- html怎么实现蓝色垂直的直线,css实例教程 一款纯css实现的垂直时间线效果
今天给大家分享一款纯css实现的垂直时间线效果.垂直时间线适合放在类似任务时间安排的网页上.该实现采用了蓝色作为主题色,界面效果还不错.一起看下效果图: 实现的代码. html代码: 复制代码代码如下 ...
- 【iOS】基于Realm数据库的记账软件--时间线模块(三)
1.前言 接下来,我们将开始搭建时间线界面.该模块是界面展示中最大的难点–时间线布局.那么,我们先来看看效果图,因为gif上传后,动不了.所以在这里用几张截图和文字简单的描述一下,具体效果大家可下载项 ...
- 微信小程序Timeline时间线效果实现
微信小程序实现类似elementUI的Timeline时间线效果,自适应页面与文本 wxml代码: <view class="box"><view wx:for= ...
- vue+element Carousel实现幻灯片展示列表并联动时间线
工作中开发的一个小组件,使用element幻灯片展示列表,并且使用时间线展示数据所有的年份月份并根据是否支付显示不同的颜色,点击时间线上的月份可以跳转到对应的幻灯片并选中 复制代码运行即可 // 月结 ...
- iOS运行时-使用Runtime向Category中添加属性以及运行时介绍
前言 了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category ...
- 评论回复功能 asp.net_微信重大更新!公众号推送时间线打乱+7大新功能上线!怎么玩?...
作者 |韩俊杰来源 |馒头商学院「ID:mantousxy」自从微信年初举办公开课后,每个月都没闲着,各种新功能.小改版层出不穷.就在最近,微信又接连推出几项新功能,动作让人"眼花缭乱&qu ...
- layui框架学习(10:时间线)
时间线,英文timeline,也叫时光轴.时间轴,是指以时间为记录方式的一种网络布局形式,其形式之一为下图所示(示例图来自参考文献5). Layui官网教程中的更新日志页面也用了时间线样式,如 ...
最新文章
- nodejs mysql 创建连接池
- python与java、php、go的优势对比
- Android开发之WebView加载HTML源码包含转义字符实现富文本显示的方法
- css就近原则_CSS的引入方式和优先级
- MySQL数据库的索引、事务和存储引擎
- 3D到2D的转换方式
- 解锁工具Unlocker试用
- DataStory X Kungfu | DemoDay亮点大揭秘
- 最新 跟我学spring3 电子书下载
- 稳扎稳打JS——执行上下文
- 关闭eclipse控制台console中的非Java Server(ESLint、Angular Language Server等)
- 三种治疗新冠肺炎中药颗粒获批上市
- 微信curl上传客服头像接口遇到的坑
- 解析飞凌嵌入式i.MX8MM在智慧医疗麻醉系统中的应用方案
- 常用的40引脚的RGB屏介绍
- cudnn linux 安装
- Mac OS X下快速复制文件路径
- python(scipy)实现填充孔洞的方法(非常类似于MATLAB的imfill)
- 几分钟搞懂Vuex(State,Mutations,Actions)
- 苹果手机代数_iPhone各代发布时间,从1到6
热门文章
- 常见的贴片LED封装尺寸规格表
- CMD 命令 文件操作
- AMI与HDB3的matlab实现
- C语言写程序注意,单片机C语言编程应注意的若干问题
- 河北省高中会考计算机试题及答案,河北省高中信息技术会考题.doc
- DSP2812入门4——构建完整工程
- 安装虚拟机提示未能启用服务器,win7系统共享虚拟机提示VMware Workstation Server共享服务不能启动的解决方法...
- 非线性动力学_第17届全国非线性振动暨第14届全国非线性动力学 和运动稳定性学术会议在南京召开...
- 推荐一款PDF阅读工具Apabi Reader
- windows消息钩子