CollectionViewCell按效果

时间:2017-02-08 05:30:11

标签: ios ipad swift3 uicollectionview uicollectionviewcell

我想在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
}

1 个答案:

答案 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