我有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

最佳答案

问题在于单元正在被重用。可以这样考虑,如果您有100个不同的对象,但一次只显示2个,则collectionview仅会创建大约4个单元格。这样做是为了节省内存并提高性能

因此,如果屏幕上的单元格A和B分别显示array [0]和array [1]的详细信息,然后开始滚动,则将出现的下一个单元格是C和D,它们分别显示array [2]和array [3 ]。但是,如果继续滚动,A和B将再次出现,但是这次它将向您显示array [4]和array [5]的信息。然后,如果您继续滚动,它将再次显示单元格C和D,但对array [6]和array [7]带有失真。这是重用细胞的想法

因此,在您的情况下,正在将动画应用于单元格A,但是在滚动时,您会继续在“其他单元格”上看到此动画。这些其他单元实际上是单元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

10-08 05:33
查看更多