我们有一个自定义布局非常类似的UITableView(它垂直滚动)一个UICollectionView。 所述UICollectionView同时仅显示3细胞,用其中之一是当前活动的细胞:
[ 1 ]
[*2*]
[ 3 ]
(这里的活动单元格是#2。)将细胞大致280点高,所以只有活动小区是在屏幕上完全可见。 用户不直接滚动到导航视图,相反,她挥笔水平活动单元格前进到下一个单元格。 然后,我们做一些花哨的动画和滚动UICollectionView所以下一个单元是在“主动”地位,从而使其成为一个活跃的,移动旧的路程,把队列中的下一个单元格:
[ 2 ]
[*3*]
[ 4 ]
这里的问题是设置UICollectionView的偏移。 目前,我们将其设置在一个UIView动画块( self.collectionView.contentOffset = targetOffset;
与其他三个动画特性,这主要是工作很大沿,而导致所述第一小区(以前的活动之一,在后者的情况下,#2)尽快消失作为动画开始运行时,延迟时间完成之前就。 这绝对是不理想的。
我想过一些解决方案,但不能找出最好的一个:
荒谬扩大UICollectionView的框架,以适应五个格,而不是三个,从而迫使它使细胞保持在内存中,即使它们是屏幕之外。 我已经试过这和它的作品,但它听起来像是一个非常肮脏的黑客。
就拿消失细胞的呈现内容的快照,把它放在一个UIImageView,加入的UIImageView作为滚动视图的子视图的细胞去之前远去的老细胞完全相同的位置,一旦动画结束时删除它。 听起来比前一个选项(内存明智的,至少)少苏茨基,但还是有点哈克。 我也不知道做到这一点的最好办法,请点我在正确的方向。
切换到UIScrollView的
setContentOffset:animated:
。 实际上,我们曾经有过这一点,它解决了这一消失的电池问题,但在并行与其他的UIView动画显然是竞争的主线程的注意运行此,从而创造单核设备上非常波涛汹涌的动画(iPhone 3GS / 4)。 它也不会允许我们改变动画的持续时间或宽松,所以感觉不同步的其余部分。 仍是一个选项,如果我们能找到一种方法,使其在协调工作与UIView的块动画。切换到UICollectionView的
scrollToItemAtIndexPath:atScrollPosition:animated:
。 没有试过,但它有一个很大的弊端:只需要3个可能的常数(适用于这种情况下,至少)目标滚动位置:UICollectionViewScrollPositionTop
,UICollectionViewScrollPositionCenteredVertically
和UICollectionViewScrollPositionBottom
。 活动单元格可能会改变其高度,但它总是必须是35分从窗口的顶部,而这些选项都无法提供足够的控制来完成设计。 它也可能是一样的3.1问题。 仍是一个选项,因为有可能是一个办法绕过去滚动位置的事情,我不知道,它可能不会有同样的问题与主线程,这似乎不太可能。
任何帮助将不胜感激。 如果你需要澄清,请询问。 非常感谢!