动画集合视图中的数据更改

时间:2016-01-07 15:41:56

标签: ios swift animation uicollectionview

我想在我的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块中,但也失败了。

2 个答案:

答案 0 :(得分:2)

您可以尝试:

collectionView.performBatchUpdates({ () -> Void in
   // here you can insert ,delete and animate cells
}) { (success) -> Void in    
   //completion block
}

答案 1 :(得分:0)

使用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
          })
    }
}