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)
UITableviews 作为 iCarousel 的子视图添加了滑动问题