您的位置:首页 > 产品设计 > UI/UE

iOS - 在UITableViewCell中添加3DTouch功能的正确姿势

2018-04-28 17:25 127 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/samuelandkevin/article/details/80137551

  眨眼间,已经有1年没写过iOS的文章了,可能是忙于学习后台知识。最近,因为app有新需求,顺便就把聊天列表模块加入3DTouch功能。在天朝内百度了许多关于iOS UITableViewCell的3DTouch开发资料,发现存在一个通俗的问题,就是在数据源cellForRowAtIndexPath执行registerForPreviewingWithDelegate,当UITableViewCell过多且重复注册的时候,会造成耗cpu性能和滚动不流畅的后果。于是,我踩过坑,总结如下。

二话不说,上菜。

peek图和pop图:   

在cellForRowAtIndexPath执行registerForPreviewingWithDelegate的缺点:

  每次滑动UITableView,都会注册3DTouch预览功能。因为registerForPreviewingWithDelegate比较耗cpu性能,如果UITableViewCell视图层级多,并且屏幕上显示有多个cell,使劲滑动UITableView,细心的你会发现在xcode里,项目的cpu使用率高达40%。那么,是在哪里和在哪个时机添加registerForPreviewingWithDelegate注册功能为最合适呢。

在UITableView中注册registerForPreviewingWithDelegate的地点和时机:

  因为peek和pop都是涉及关于长按手势功能,我就选择在UITableViewCell初始化的时候,contentview添加长按手势,当长按手势为开始状态的时候就回调信息给controller,进行注册功能。在CellChatList.m中,部分代码如:   然后我写了一个YHChatTouch类,主要是封装3DTouch注册功能。在YHChatTouch中,部分代码如:   在聊天列表YHChatListVC类中,调用YHChatTouch注册功能,部分代码如下:   cellForRow中注册代理touchDelegate:   代理回调: 只要你掌握了注册3DTouch的时机和位置,有效地提高滚动视图的滑动流畅性能。

详情代码,可以参考我的博文附带资源,喜欢的点个like哦:

iOS-YHChat仿微信聊天(老司机带你入门即时通讯)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: