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】:

使用以下技术来实现您的效果 - 在您的集合视图委托中覆盖 didHighlightItemAtdidUnhighlightItemAt,如下所示:

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 插入动画?

Swift - 使用CollectionView实现图片Gallery画廊效果(左右滑动浏览图片)

CollectionViewCells 不会以编程方式出现 - Swift 5