作家
登录

iOS中关于列表滚动流畅的一些探讨

作者: 来源: 2017-09-11 10:00:56 阅读 我要评论

return
  •      
  •     _entity = entity; 
  •      
  •     CGFloat maxLayout = ([UIScreen mainScreen].bounds.size.width - 20.f); 
  •     CGFloat bottom = 4.f; 
  •      
  •     //title 
  •     CGFloat titleX = 10.f; 
  •     CGFloat titleY = 10.f; 
  •     CGSize titleSize = [entity.title boundingRectWithSize:CGSizeMake(maxLayout, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : Font(16.f)} context:nil].size
  •     _titleFrame = CGRectMake(titleX, titleY, titleSize.width, titleSize.height); 
  •      
  •     //cell Height 
  •     _cellHeight = (CGRectGetMaxY(_titleFrame) + bottom); 
  •  
  • @end 
    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    2.     FrameFeedCell *cell = [tableView dequeueReusableCellWithIdentifier:FrameFeedCellIdentifier forIndexPath:indexPath]; 
    3.     FrameModel *frameModel = self.data[indexPath.row]; 
    4.     cell.model = frameModel; 
    5.     return cell; 
    6.  
    7. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    8.     FrameModel *frameModel = self.data[indexPath.row]; 
    9.     return frameModel.cellHeight; 
    1. - (void)setModel:(FrameModel *)model { 
    2.     if (!model) return
    3.      
    4.     _model = model; 
    5.      
    6.     FDFeedEntity *entity = model.entity; 
    7.      
    8.     self.titleLabel.frame = model.titleFrame; 
    9.     self.titleLabel.text = entity.title; 

    优缺点

    近些年,App 越来越推许体验至上,随随便便乱写一通的话已经很难让用户买帐了,顺滑的列表就是个中很重要的一点。如不雅一个 App 的页面滚动起来老是卡顿卡顿的,轻则被算作不和教材来吐槽或者衬托“我们的 App balabala…”,重则直接卸载。正好比来在优化这一可儿,总结记录下。

    缓存行高方法有现成的看悟单便利,固然 UITableView-FDTemplateLayoutCell 已经处理的很好了,然则 Auto Layout 对机能照样会有部分消费;手动计算 frame 方法所有的地位都须要计算,比较麻烦,并且在数据量很大年夜的情况下,大年夜量的计算对数据展示时光会有部分影响,响应的回报就是机能会更好一些。

    文本异步衬着

    当显示大年夜量文本时,CPU 的压力会异常大年夜。对此解决筹划只有一个,那就是自定义文本控件,用 TextKit 或最底层的 CoreText 对文本异步绘制。尽管这实现起来异常麻烦,但其带来的优势也异常大年夜,CoreText 对象创建好后,能直接获取文本的宽高等信息,避免了多次计算(调剂 UILabel 大年夜小时算一遍、UILabel 绘制时内部再算一遍);CoreText 对象占用内存较少,可以缓存下来以备稍后多次衬着。


      推荐阅读

      Java 9的JDK中值得期待的:不仅是模块化

    【译者注】在本文中,作者介绍了即将在9.21宣布的Java 9新特点,除了最重要的模块化以外,还涉及到编译,对象,协定,缓存等新特点,也说起了在此次版本中移除的功能,供Java爱好者浏览和>>>详细阅读


    本文标题:iOS中关于列表滚动流畅的一些探讨

    地址:http://www.17bianji.com/lsqh/37290.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)