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