代码之家  ›  专栏  ›  技术社区  ›  jtrim

带Calayer+蒙版的uiTableView滚动性能

  •  5
  • jtrim  · 技术社区  · 16 年前

    这不是一个真正的问题,因为我刚刚解决了这个问题,但我认为这个问题的本质对于许多iPhone开发者来说是很常见的,而且解决方案也不是很明显,所以我想分享我的经验。为了保持stackoverflow的“问题/答案”格式,我将把细节放到问题中,把我的解决方案放到答案中。

    细节:

    我有一个满是单元格的表格视图,有两个标签和一个自定义的切换开关控件,我从头开始组装。如果我隐藏了切换控件,TableView就会像冠军一样滚动。但是,在显示切换控件的情况下,iPhone3G上的滚动会很痛苦地起伏/缓慢。我的TableView单元没有透明组件(除了层的遮罩),我正在重用单元。

    自定义切换控件扩展uibutton,它的层有两个组件-一个uiimageview(包含切换的滑动“切换”部分)和一个用作遮罩的细长椭圆,在层后面绘制背景 -drawRect: .

    我是怎么修好的?答案很快就会出来…

    1 回复  |  直到 16 年前
        1
  •  6
  •   jtrim    16 年前

    我发现慢度/起伏度的来源是在滚动时必须将层与蒙版子层重新组合在一起。我想每次重新绘制屏幕时都必须重新绘制切换开关。

    我的解决方案是隐藏切换开关层/遮罩,除非它正在改变状态。当它完全处于打开或关闭位置时,我隐藏了切换开关层,并将其替换为切换开关的图像。当用户触摸切换时,虚拟图像隐藏,实际的ToggleSwitch组件显示,并将动画设置为相反的状态。动画完成后,我隐藏切换组件并显示虚拟图像,确保将图像更改为当前状态。这显著提高了滚动性能…我敢说它几乎和本机默认的TableView单元一样好。

    推荐文章