2014-03-13 3 views
1

내 프로젝트 중 하나에서 UICollectionView을 사용하고 있으며 콜렉션 뷰에서 reloadData을 호출하려고하면 셀 순서가 항상 동일하게 변경됩니다.
는 그와 같은 세포 뭔가를 만들 :UICollectionView reloadData가 셀 순서를 변경합니다.

- (UICollectionViewCell *)collectionView:(UICollectionView *)aCollectionView 
        cellForItemAtIndexPath:(NSIndexPath *)aIndexPath { 
    PPhotoCVCell *cell = 
    [self._collectionView dequeueReusableCellWithReuseIdentifier:@"PPhotoCVCell" 
                forIndexPath:aIndexPath]; 
    if (cell.photo == nil) { 
     PPhoto *photo = self._photos[aIndexPath.row]; 
     cell.photo = photo; 
    } 

    cell.enableEditing = self._editing; 
    cell.layer.shouldRasterize = YES; 
    cell.layer.rasterizationScale = [UIScreen mainScreen].scale; 

    return cell; 
} 

셀이 사용자에 의해 선택되는 경우 셀이 오버레이 클래스 UIImageView, 이미지에 대한 하나의 다른 두 파단이있다.
편집 모드에있을 때 사용자는 셀을 선택할 수 있습니다. 일부 셀을 선택하고 사용자가 편집 모드를 종료하면 덮어 쓰기 된 setSelected: 메서드에서 애니메이션이 포함 된 오버레이 이미지보기의 alpha 값을 0.0으로 설정합니다.
컬렉션보기에서 reloadData 메서드를 호출하면 선택한 셀의 오버레이 이미지보기가 애니메이션없이 숨겨 지지만 다른 셀 오버레이 이미지 뷰는 애니메이션없이 표시되고 올바른 애니메이션으로 사라집니다.
reloadData을 호출하면 사진의 이미지보기도 변경되는 것으로 나타났습니다.

이 문제에 대한 해결책이 있습니까?

+0

안녕하세요. 정확하게 문제에 직면했는지 확인하십시오. – Javid

답변

2

세포가 재활용되고있는 것처럼 들립니다. 휴대 기기의 prepareForReuse에서 오버레이를 삭제해야합니다. 그런 다음 collectionView: cellForItemAtIndexPath:에 적절하게 오버레이를 추가하십시오.

관련 문제