日记

首页 » 归档 » 日记 » 基于 CoreText 实现的高性能 UITableView-ios学习从入门到精通尽在姬长信

基于 CoreText 实现的高性能 UITableView-ios学习从入门到精通尽在姬长信

分享最热门的ios资讯

引起UITableView卡顿对照常见的原因有cell的层级过多、cell中有触发离屏渲染的代码(譬如:cornerRadius、maskToBounds 同时使用)、像素是否对齐、是否使用UITableView自动计算cell高度的要领等。本文将从cell层级出发,以一个仿朋友圈的demo来讲述如何让列表保持顺滑,项目的源码可在文末获得。不可否认的是,过早的优化是魔鬼,请在项目出现性能瓶颈再考虑优化。

首先看看reveal上页面层级的效果图

2b08a274-46aa-11e6-9936-79cbdcaf3869.png

然后是9.3系统iPhone5的真机效果

506d7242-46b4-11e6-9bad-6b4a5d05c0a5.gif

1、绘制文本

使用core text可以将文本绘制在一个CGContextRef上,最后再通过UIGraphicsGetImageFromCurrentImageContext()生成图片,再将图片赋值给cell.contentView.layer,从而到达减少cell层级的目的。

绘制普通文本(譬如用户昵称)在context上,相关注释在代码里:

绘制朋友圈内容文本(带链接)在context上,这里我还没有去实现文本多了会折叠的效果,与上面普通文本差别的是这里需要创建带链接的AttributeString和CTLineRef的逐行绘制:

上述要领运用起来就是:

这样就完成了文本的显示。

2、显示图片

图片包罗用户头像和朋友圈的内容,这里只是将CALayer添加到contentView.layer上,具体做法是继承了CALayer,实现部门功能。

通过链接显示图片:

其他对照简单就不展开。

3、显示小视频

之前的一篇文章简单讲了怎么自己做一个播放器,这里就派上用场了。而显示小视频封面图片的CALayer同样在显示小视频的时候可以复用。

这里使用了NSOperationQueue来保障播放视频的流畅性,具体继承NSOperation的VideoDecodeOperation相关代码如下:

解码图片是因为UIImage在界面需要显示的时候才开始解码,这样可能会造成主线程的卡顿,所以在子线程对其进行解压缩处理。

具体的使用:

4、其他

1、触摸交互是覆笼罩了以下要领实现:

2、页面上FPS的丈量是使用了YYKit项目中的YYFPSLabel。

3、测试数据是微博找的,其中小视频是Gif快手。

本文的代码在https://github.com/hawk0620/PYQFeedDemo

本文作者:伯乐在线 - Hawk0620

用意志战胜身体的惰性!

(0)

本文由 姬長信 创作,文章地址:https://blog.isoyu.com/archives/726.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:7月 15, 2016 at 07:43 上午

关键词:

热评文章