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

时间:2015-01-12 14:23:52

标签: ios animation swift uiimageview

我有一个带有动画图像的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) 

6 个答案:

答案 0 :(得分:2)

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

func setSelected(selected:Bool) {

}

func setHighlighted(higlighted:Bool) {

}

答案 1 :(得分:2)

Swift 4.0版本:

override open var isSelected: Bool
{
    set {

    }

    get {
        return super.isSelected
    }
}

override open var isHighlighted: Bool
{
    set {

    }

    get {
        return super.isHighlighted
    }
}

答案 2 :(得分:1)

使用空的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()
    }
}

答案 3 :(得分:1)

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

func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {
    return false
}
<块引用>

用于动画的 UIImage 对象数组。 var highlightAnimationImages: [UIImage]?突出显示视图时用于动画的 UIImage 对象数组。完成一个图像循环所需的时间。

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

在下面的TableView Use代码中,可以解决触摸取消,触摸移动等问题

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