gpt4 book ai didi

ios - 如何为 UICollectionView 单元格选择设置动画

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:22 29 4
gpt4 key购买 nike

UICollectionView 的这些方法的animated 参数是做什么的:

  • >
    selectItem(at indexPath: IndexPath?, animated: Bool, scrollPosition: UICollectionViewScrollPosition)`
  • >
    deselectItem(at indexPath: IndexPath, animated: Bool)

我知道我可以使用 UICollectionViewLayout 对象来动画更改。我也知道我可以使用 UICollectionViewDelegatedidSelectdidDeselect 方法来获取选定的单元格并应用动画。但是我找不到关于上述 animated 参数如何影响动画的任何信息。它会以任何方式影响布局动画吗?我的目标是创建一个 UICollectionView 子类,并允许消费者自定义在内部调用上述两个方法时是否应用动画。但是我不知道那些方法控制的是什么动画。

最佳答案

UICollectionViewselectItem(at:animated:scrollPosition:)中的animated判断item是否被选中,如果不在 View 中或已在所需位置,是否应以动画方式滚动到。
如果它在 View 中,那么这个 animated 属性实际上并没有做任何事情,afaik。
deselectItem(at:animated:) 中的 animated 相同。它什么都不做,只是在那里。

我看到唯一影响布局引擎的是,如果 collectionView 滚动并且您在 didSelectItemAt 中有动画,那么它将使这些动画无效。您将不得不延迟单元格中发生的动画(请参阅此答案中的最后一个示例)


正如您已经知道的那样,但对于其他人来说,如果您想为单元格选择事件设置动画,那么您必须在 collectionView(_:didSelectItemAt:) 委托(delegate)中自己完成。

例子:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)

//Briefly fade the cell on selection
UIView.animate(withDuration: 0.5,
animations: {
//Fade-out
cell?.alpha = 0.5
}) { (completed) in
UIView.animate(withDuration: 0.5,
animations: {
//Fade-out
cell?.alpha = 1
})
}

}

如果用户点击一个单元格,上面的内容很好,但是如果你以编程方式调用 selectItem(at:animated:scrollPosition:),它不会触发上面的 collectionView(_: didSelectItemAt:) 委托(delegate),您需要显式调用它来运行您的选择动画。

示例(上一个的附加组件):

func doSelect(for aCollectionView: UICollectionView,
at indexPath: IndexPath) {
aCollectionView.selectItem(at: indexPath,
animated: true,
scrollPosition: .centeredVertically)

//DispatchQueue after sometime because scroll animation renders
//the animation block in `collectionView(_:didSelectItemAt:)` ineffective
DispatchQueue.main.asyncAfter(deadline: .now() + 0.27) { [weak self] in
self?.collectionView(aCollectionView,
didSelectItemAt: indexPath)
}
}

关于ios - 如何为 UICollectionView 单元格选择设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262200/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com