如何仅为一个indexPath.row项在CollectionView单元格中设置动画?

时间:2015-11-19 14:52:14

标签: ios swift uicollectionview nsindexpath

我有UICollectionView,我想只为一个单元格启动图像动画。但问题是,当我添加此动画时,影响的项目多于一个单元格。 这是代码:

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
{
    return 1
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
    return arrays.count
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as! CollectionViewCell

    if (indexPath.row == 0)
    {
        //do the animation

1 个答案:

答案 0 :(得分:0)

问题在于细胞正在被重复使用。可以这样想,如果你有100个不同的对象,但一次只显示2个,那么collectionview只会创建大约4个单元格。它这样做是为了节省内存和提高性能

因此,如果屏幕上的Cell A和B分别显示来自array [0]和array [1]的详细信息然后开始滚动,那么将出现的下一个单元格将是显示数组[2]的C和D.阵列[3]。但是,如果继续滚动,A和B将再次出现,但这次它将显示数组[4]和数组[5]的信息。然后,如果你继续滚动,它将再次显示单元格C和D,但是有阵列[6]和数组[7]的信息。这是重用细胞的想法

因此,在您的情况下,您正在将动画应用于单元格A,但是当您滚动时,您将继续在“其他单元格”上看到此动画。事实上,这些其他细胞正在被重复使用。

解决方案是您在调用cellForItemAtIndexPath:时停止在单元格上的动画,即

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as! CollectionViewCell
    /* 
    Stop animation in case the cell is already being animated
    */
    if (indexPath.row == 0)
    {
        //do the animation