我想在collectionViewCell
上为didSelectItem
提供新闻效果。点击后我想添加一些颜色,经过一段时间后我想恢复颜色。在尝试下面的代码时,仅在延迟一段时间后才会添加按下效果。有谁能建议如何实现这个目标?
DispatchQueue.global(qos: .utility).async {
let cell = collectionView.cellForItem(at: indexPath) as ..cell
// Change bg color for foreground layer
DispatchQueue.main.async {
Timer.scheduledTimer(timeInterval: 0.10, target: self, selector: #selector(self.updateCell(timer:)) , userInfo: ["cell":cell,"collectionview":collectionView], repeats: false)
}
// Some calculations
}
答案 0 :(得分:0)
.cellForItem(at: indexPath) as ..cell
,如果从实用程序队列中执行此操作,您可能会看到奇怪的行为
我建议不要自己使用DispatchQueues并处理动画计时,已经有一个很好的功能可以完全满足您的需求。这是我的建议:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as ..cell
UIView.animate(withDuration: 0.2, delay: 0.4, options: .curveEaseInOut, animations: {
cell.backgroundColor = UIColor.red
}, completion: { _ in
// here the animation is done
})
}
无论如何,我认为比在didSelectItemAt
的{{1}}函数中处理动画更好的方法是覆盖单元格的UICollectionViewDelegate
属性。
在此示例中,只要UICollectionViewCell的选择状态发生变化,我就会为backgroundColor设置动画 - 选中时为红色,否则为绿色。只需用你想要的任何风格来代替它。
isSelected