我正在制作一个简单的闪卡应用程序。卡片被加载到集合视图中。当有人点击卡片时,我想要进行旋转动画,并将文本标签更改为答案。
func animateRotationY(view: UIImageView) {
let animation = CABasicAnimation(keyPath: "transform.rotation.y")
let angleRadian = CGFloat.pi * 2
animation.fromValue = 0
animation.byValue = angleRadian
animation.toValue = angleRadian
animation.duration = 1.0
animation.repeatCount = 1
view.layer.add(animation, forKey: nil)
}
我在didSelect方法中调用这个动画函数
extension FlashCardsViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = flashCardsView.collectionView.dequeueReusableCell(withReuseIdentifier: "FlashCardCell", for: indexPath) as! FlashCardCollectionViewCell
let row = indexPath.row
let selectedCard = flashCards[row]
animateRotationY(view: cell.imageView)
selectedIndexPath = row
cell.textLabel.text = selectedCard.answer
self.flashCardsView.collectionView.reloadData()
}
问题是,不仅动画不会显示,而且即使断点正在击中那些行,textLabel也不会更新。有没有人知道如何在didSelect中更新UI?
答案 0 :(得分:1)
当您致电dequeueReusableCell(withReuseIdentifier:for:)
时,您没有获得已经显示的单元格并且您想要更改。
您应该致电flashCardsView.collectionView.cellForItem(at: indexPath)
。
此外,调用reloadData()
会导致为每个索引路径调用collectionView(_:cellForItemAt:)
,这可能会覆盖您在选择单元格后所做的任何更改。