Swift 动画 CollectionView 项目点击
Posted
技术标签:
【中文标题】Swift 动画 CollectionView 项目点击【英文标题】:Swift animate CollectionView item on tap 【发布时间】:2021-02-20 10:32:15 【问题描述】:我正在尝试为 CollectionViewCell
设置动画,当它是 tapped
时,有点像在 AppStore 中。我设法几乎得到了这种行为,但它不是 100% 流畅:
这里是video,以便更好地理解。
如果您仔细观察,您会发现在轻按cell
后,它会再次缩小一小会儿。
这是我的代码:
func shrink(down: Bool)
UIView.animate(withDuration: 0.2)
if down
self.theView.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
else
self.theView.transform = .identity
override var isHighlighted: Bool
didSet
shrink(down: isHighlighted)
如何解决商品只缩小一次的问题? 如果有任何不清楚的地方,请告诉我。
【问题讨论】:
@Sh_Khan 干什么用的?isHighlited
在点击时被调用了两次,我检查了
@Sh_Khan print(isHighlighted)
in didSet
正在打印 true
& false
@Sh_Khan 你是什么意思? cell
应该在点击时向上和向下收缩。但正如您在视频中看到的那样,它正在上下收缩
【参考方案1】:
使用以下技术来实现您的效果 - 在您的集合视图委托中覆盖 didHighlightItemAt
和 didUnhighlightItemAt
,如下所示:
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath)
let cell = collectionView.cellForItem(at: indexPath)
UIView.animate(withDuration: 0.2)
cell?.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath)
let cell = collectionView.cellForItem(at: indexPath)
UIView.animate(withDuration: 0.2)
cell?.transform = .identity
【讨论】:
@Chris 你在哪里实现它?它应该是您的cellForItem...
以及所有委托和数据源方法所在的位置。确保您的delegate
设置正确。
感谢您的帮助!但实际上我自己设法解决了它。看看我的回答【参考方案2】:
我解决了:我必须在 duration
缩小或返回时将其设置为不同,这样我才能获得平滑的过渡:
func shrink(down: Bool)
if down
UIView.animate(withDuration: 0.3)
self.theView.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
else
UIView.animate(withDuration: 0.5)
self.theView.transform = .identity
override var isHighlighted: Bool
didSet
shrink(down: isHighlighted)
这是现在平滑过渡的样子:
https://gofile.io/d/dwnuCW
如果你想测试结果,这里是我的应用程序的链接:
https://apps.apple.com/de/app/wishlists-einfach-w%C3%BCnschen/id1503912334
【讨论】:
以上是关于Swift 动画 CollectionView 项目点击的主要内容,如果未能解决你的问题,请参考以下文章
带有 collectionView 的 Hero ViewController 动画 - swift
用动画隐藏上方的 CollectionView 单元格(Swift 4)
将 IndexPath 行值传递给委托函数而不是 Sender.tag 以删除图像项 CollectionView Swift
如何使用 Swift 为 UICollectionView 插入动画?