如何减少点击单元格和运行某些代码之间的时间?
Posted
技术标签:
【中文标题】如何减少点击单元格和运行某些代码之间的时间?【英文标题】:How to reduce the amount of time between a tap on a cell and the running of certain code? 【发布时间】:2019-06-17 19:59:06 【问题描述】:我有下面的代码,它成功地导致collectionView
中的单元格在被点击时被按下。
问题是,在萧条发生之前,人们必须坚持很长时间。不要误会我的意思。它只有大约 1 秒,但如果你将该速度与 snapchat 的速度进行比较,你可以清楚地看到 snapchat 几乎是即时的。
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath)
UIView.animate(withDuration: 0.1, animations:
collectionView.cellForItem(at: indexPath)!.transform = CGAffineTransform.identity.scaledBy(x: 0.95, y: 0.95)
)
问题:我怎样才能为每个单元格制作这个动画,是即时的还是更接近它,就像 snapchat 一样?
更新:
这似乎是这样做的:
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath)
UIView.animate(withDuration: 0.1, animations:
collectionView.cellForItem(at: indexPath)!.transform = CGAffineTransform.identity.scaledBy(x: 0.95, y: 0.95)
) (true) in
UIView.animate(withDuration: 0.1, animations:
collectionView.cellForItem(at: indexPath)!.transform = CGAffineTransform.identity.scaledBy(x: 1, y: 1)
)
如果有人想要一些基本的东西,这是一个选项。
【问题讨论】:
developer.apple.com/documentation/uikit/… @canister_exister,不,放手后运行。上面的方法在用户按住时运行,因为那是它需要启动的时候。 ***.com/a/38922613/4311935 ***.com/a/29242979/4311935 使用 didHighlightItemAt 的原因是什么? 【参考方案1】:在界面生成器中禁用collectionView
内容触摸延迟:
或在代码中:
myCollectionView.delaysContentTouches = false
提示:为此动画启用.beginFromCurrentState
选项将使它看起来更加流畅和响应迅速。来自 Apple 在beginFromCurrentState
上的文档:
从与已经进行中的动画关联的当前设置开始动画。
UIView.animate(withDuration: 0.1, delay: 0, options: [.beginFromCurrentState], animations:
) finished in
【讨论】:
这将是您提示的正确实现吗?:myCollectionView。 beginFromCurrentState = true //因为它说没有 .beginFromCurrentState 不,它用于UIView.animate
函数【参考方案2】:
如果你想要即时性,你可以在你的自定义 UICollectionViewCell 的 touchesBegan 和 touchesEnded/touchesCanceled 方法中来回转换
【讨论】:
以上是关于如何减少点击单元格和运行某些代码之间的时间?的主要内容,如果未能解决你的问题,请参考以下文章