UITableView 的 iCarousel 性能问题(iPad 主从 UI)

Posted

技术标签:

【中文标题】UITableView 的 iCarousel 性能问题(iPad 主从 UI)【英文标题】:iCarousel performance issue with UITableView (iPad master-detail UI) 【发布时间】:2013-05-19 12:46:57 【问题描述】:

我目前正在使用主从 iPad UI:在 UISplitViewController 内,左侧(主)侧包​​含 UITableViewController,右侧(详细)侧包含 iCarousel。见附图。

问题:滚动表格视图时WHILE轮播仍在动画表格视图滚动和减速平稳,iCarousel滚动进入一种缓慢(即几乎没有动画)的时尚。

当动画与表格视图同步/减速时,如何提高 iCarousel 的动画“流畅度”?

考虑的要点:

    在 iPad 1(非视网膜)、iPad 4G(视网膜)以及模拟器视网膜和非视网膜上测试,在所有平台上的结果相同。

    不管是先拖轮播再拖table还是其他顺序似乎都无所谓,table view总是“优先”,iCarousel流畅的动画表现好像走*^&k!。

【问题讨论】:

我不知道 iCarousel,但听起来像是在“错误”的运行循环模式中安排了任何驱动它的动画。将其设置为NSRunLoopCommonModes ,它应该可以工作。 该控件是一个(非常棒!)类似于封面流的控制器,名为“iCarousel”。它似乎使用“NSTimer scheduleTimerWithTimeInterval:target:selector:userInfo:repeats”进行动画处理,并且它间歇性使用“[_timer invalidate]”也“[CATransaction setDisableActions:YES]”和“[CATransaction setDisableActions:NO]”没有调度类中似乎使用了任何运行循环模式/类型。 【参考方案1】:

问题在于驱动动画的计时器被安排在默认的运行循环模式下,这意味着当您滚动UIScrollView(表格视图继承自)时,计时器不会触发。要解决这个问题,您必须修改 iCarousel 代码(第 1737 行,startAnimation)。添加以下内容:

[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

【讨论】:

@RabinDev 你是对的,对不起!我在尝试吃东西时将其输入SO,显然不是我最好的主意之一! :p 顺便说一句,当我在 iCarousel 控制器的 github 问题跟踪器中发布了同样的问题时,收到了来自上述控制器作者的友好电子邮件回复。他也提出了这个解决方案。所以我想这会使这个答案成为一个“更好”的答案。

以上是关于UITableView 的 iCarousel 性能问题(iPad 主从 UI)的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 的 iCarousel 性能问题(iPad 主从 UI)

iCarousel的简单介绍及应用

UITableviews 作为 iCarousel 的子视图添加了滑动问题

iCarousel 线性类型从中心开始

重新加载 UITableView 有 UITableViewCell 可见性问题

自定义 UITableview 单元格可访问性无法正常工作