我有一个由NSFetchedResultsController驱动的CollectionView。
CollectionViewLayout是按名称的升序排列的水平“轮播”布局,用于存储单元格。
新商品中插入了海关动画。
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
if type == NSFetchedResultsChangeType.Insert {
println("Insert Object: \(newIndexPath)")
UIView.animate(withDuration: 1.0, delay: 0.0, options: .curveEaseOut, animations: {
self.collectionView?.insertItems(at: [newIndexPath])
}, completion: { finished in
self.collectionView?.scrollToItem(at: newIndexPath, at: .centeredHorizontally, animated: true)
})
)
...
它可以工作,但是动画有点小故障,并且滚动同时发生。
我想滚动到Item,然后使用自定义动画将其插入,但是如果我滚动到Item之前将其插入,则应用程序崩溃。
这里正确的做法是什么?
谢谢
答案 0 :(得分:0)
通过查看该函数,我可以想象到,您看到的故障是CollectionView向前滚动,然后向后滚动橡皮筋/“传送”。
我认为这可能是由于您试图同时运行两个动画而发生的。 您的第一个动画UIView.animate()使滚动到新插入项的动画显示出来。但是,当您调用collectionView?.scrollToItem()时,您也会对其进行动画处理(见下文)
self.collectionView?.scrollToItem(..., animated: true) <--
这可能就是为什么它不起作用的原因;您正在尝试制作动画动画。 尝试将animation设置为false,看看是否可以解决该问题。