uiimageview 动画在用户触摸屏幕时停止

Posted

技术标签:

【中文标题】uiimageview 动画在用户触摸屏幕时停止【英文标题】:uiimageview animation stops when user touches screen 【发布时间】:2015-01-12 14:23:52 【问题描述】:

我有一个带有动画图像的 UImageview。 我在代码中添加 uiimageview 及其 CollectionViewCell 的一部分 当用户触摸单元格时动画停止,为什么会发生这种情况?

代码:

 var images: [UIImage] = []
for i in 0...10 
   images.append(UIImage(named: "image\(i)"))


        let i = UIImageView(frame: CGRect(x: xPos, y: yPos, width: 200, height: 200))
        i.animationImages = images
        i.animationDuration = 0.5
        i.startAnimating()
        i.contentMode = UIViewContentMode.Center
        i.userInteractionEnabled = false

        self.addSubview(i) 

【问题讨论】:

动画期间禁用collectionView用户交互怎么样? 谢谢,我禁用了 collectionView 单元格的用户交互。现在可以了。 【参考方案1】:

如果您不想进行任何交互,那么以下将是解决此问题的最快方法: collectionView.allowsSelection = false

【讨论】:

你让我开心!谢谢!【参考方案2】:

在您的自定义集合视图单元类中,编写以下方法来修复问题

func setSelected(selected:Bool) 



func setHighlighted(higlighted:Bool) 


【讨论】:

【参考方案3】:

Swift 4.0 版本:

override open var isSelected: Bool

    set 

    

    get 
        return super.isSelected
    


override open var isHighlighted: Bool

    set 

    

    get 
        return super.isHighlighted
    

【讨论】:

如何使用?【参考方案4】:

用空的 setter 覆盖 isSelected、isHighlighted 可以解决这个问题,但是会丢失这两个要设置的属性。我可以通过在 UICollectionViewDelegate 中的 didSelectItemAt 处调用 imageView.startAnimating() 来解决这个问题。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    let item = items[indexPath.item]
    if item.hasGIF 
        let cell = collectionView.cellForItem(at: indexPath) as! ItemCell
        cell.imageView.startAnimating()
    


func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) 
    let item = items[indexPath.item]
    if item.hasGIF 
        let cell = collectionView.cellForItem(at: indexPath) as! ItemCell
        cell.imageView.startAnimating()
    

【讨论】:

【参考方案5】:

就我而言,我无法禁用选择或使用此处之前发布的任何解决方案。我不需要突出显示单元格,因此我通过下面的委托方法将其禁用以返回 false,从而阻止调用 stopAnimating() 方法。这是我在 UICollectionViewCell 中使用 KingFisher 的 AnimatedImageView 时遇到的问题。

func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool 
    return false

用于动画的 UIImage 对象数组。 var highlightAnimationImages: [UIImage]?突出显示视图时用于动画的 UIImage 对象数组。遍历一个图像周期所需的时间。

【讨论】:

【参考方案6】:

在TableView中使用下面的代码可以解决touche cancel, touche move等等

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath 
    [cell startAnimation];

【讨论】:

以上是关于uiimageview 动画在用户触摸屏幕时停止的主要内容,如果未能解决你的问题,请参考以下文章

触摸 CollectionView 时禁用动画?

UIImageView 动画预加载

多个uiimageview触摸

如何触摸 UIImageView,然后用另一个 UIImageView 替换,当手指移动时它会拖动,而不用抬起手指

使用叠加按钮为 UIImageView 设置动画

使 UIImageView 离开屏幕的动画