在 collectionView 中动画化数据的变化
Posted
技术标签:
【中文标题】在 collectionView 中动画化数据的变化【英文标题】:Animate the changing of data in a collectionView 【发布时间】:2016-01-07 15:41:56 【问题描述】:我想为我的 UICollectionView 中的更改设置动画。我将 collectionView 作为@IBOutlet
:
@IBOutlet weak var collectionView: UICollectionView!
然后集合视图重新加载(这样我就可以更改每个单元格的 alpha),如下所示:
var bulkAwardMode = false;
@IBAction func bulkAwardToggleClicked(sender: UIButton)
if(bulkAwardMode == false)
bulkAwardMode = true
else
bulkAwardMode = false
dispatch_async(dispatch_get_main_queue(),
self.collectionView.reloadData()
)
但是由于这不是动画,我尝试将reloadData()
行更改为self.collectionView.reloadSections(NSIndexSet(index: 0))
,但这只会导致崩溃并出现错误attempt to create view animation for nil view
。
我显然做错了什么,但我不太确定是什么。我也尝试将代码放在UIView.animateWithDuration
块中,但也失败了。
【问题讨论】:
所以你要淡入,淡出每个单元格的数据,然后1秒后显示其他数据? 在cellForItemAtIndexPath
中,我根据批量奖励是否开启来设置阿尔法,所以reloadData()
会更新阿尔法——我希望该更改具有动画效果。那有意义吗?如果有帮助,我计划让用户选择单个单元格,然后在启用批量奖励的情况下变成不同的颜色。
@Ben 你知道如何解决这个错误吗?谢谢!
@sridvijay 不幸的是没有 - 下面的解决方案并没有真正做到我最初想要的。我敢肯定,如果我改变我的方法,它们会产生类似的效果,但这并不能真正解释为什么我尝试的方法不起作用。
谢谢,是的,我最终只是切换到了表格视图。这很奇怪,因为我无法在单独的新项目中重新创建它只是为了测试它......
【参考方案1】:
你可以试试:
collectionView.performBatchUpdates( () -> Void in
// here you can insert ,delete and animate cells
) (success) -> Void in
//completion block
【讨论】:
【参考方案2】:使用 UITableViewDelegate
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,forRowAtIndexPath indexPath: NSIndexPath)
UIView.animateWithDuration(0.4, animations: () -> Void in
cell.alpha = self.bulkAwardMode
)
当您重新加载数据时调用此函数。
否则,你会得到可见的单元格:
@IBAction func bulkAwardToggleClicked(sender: UIButton)
if(bulkAwardMode == false)
bulkAwardMode = true
else
bulkAwardMode = false
var visibleCells = tableView.visibleCells
for cell in visibleCells
UIView.animateWithDuration(0.4, animations: () -> Void in
cell.alpha = self.bulkAwardMode
)
【讨论】:
这是一个collectionView而不是一个tableView,但我假设有一个等价物。谢谢 Edward - 你能解释一下为什么 reloadItemsAtIndexPaths 不起作用吗? 您是否尝试删除 dispatch_async? ReloadData 已经是一个异步方法。 是的,试过了——我真的很想了解这个问题,而不是仅仅修补它!以上是关于在 collectionView 中动画化数据的变化的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CollectionView 单元格上添加过渡动画?