UICollectionViewCell为选定/突出显示的项目添加动画

时间:2013-05-02 22:47:32

标签: iphone ios5 uicollectionview uicollectionviewcell uiviewanimationtransition

我正在使用单元格内的图像实现简单的集合视图。我想要实现的任务是当用户点击单元格时 - 应该有翻转动画,并且一些细节必须出现在同一个单元格中。

我已经尝试了很多东西来实现这一点,例如我在单元格的ContentView上添加了两个视图。当用户按下按钮时,我调用了transitionToView方法,一切正常,但当列表包含超过9-10个图像时,滚动列表后,一些单元格开始无条件地复制“翻转”视图。我关闭了dequeueReusableCellWithReuseIdentifier函数,一切正常,但在像iPhone4这样的旧设备上,应用程序工作起来很慢。

所以我找到的最佳解决方案是:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
{

    UICollectionViewCell *cell1 = [cv dequeueReusableCellWithReuseIdentifier:kCellID3 forIndexPath:indexPath];enter code here

    UIView *contents = [[UIView alloc]initWithFrame:cell1.bounds];
    contents.layer.borderColor = [[UIColor colorWithRed:0.119 green:0.108 blue:0.222 alpha:1]CGColor];
    contents.layer.borderWidth = 10.0f;
    contents.backgroundColor = [UIColor yellowColor];
    [cell1.contentView addSubview:contents];

    UIView *backgroundView = [[UIView alloc]initWithFrame:cell1.bounds];
    backgroundView.layer.borderColor = [[UIColor colorWithRed:0.529 green:0.808 blue:0.922 alpha:1]CGColor];
    backgroundView.layer.borderWidth = 4.0f;
    backgroundView.backgroundColor = [UIColor greenColor];
    cell1.selectedBackgroundView = backgroundView;
    [cell1 bringSubviewToFront:cell1.selectedBackgroundView];

    return cell1;
}

但是当单元格被选中时,是否可以为事件添加一些动画?

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell1 = [collectionView cellForItemAtIndexPath:indexPath];

    UIView *toSwitch = cell1.contentView;
    [UIView transitionFromView:toSwitch toView:cell1.selectedBackgroundView duration:0.33 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromLeft completion:nil];

}

这种尝试也破坏了我的细胞 - 当一个或多个细胞被翻转时,其他细胞开始复制它。

所以我需要一个动画(我取得的成就),但是我需要让其他UICollectionView单元保持唯一,并且不要重复使用这个翻转的视图。

请帮忙! :)真的很绝望!

提前致谢

一些解决方案:

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
    if(cell.selected)
    {
        [cell setSelected:NO];
        [collectionView deselectItemAtIndexPath:indexPath animated:NO];
        UIView *toSwitch = cell.contentView;
        [UIView transitionFromView:cell.selectedBackgroundView toView:toSwitch duration:0.001 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
    }
}

非常适合临时解决方案......任何人都有更好的建议吗?

1 个答案:

答案 0 :(得分:2)

滚动时,会重复使用“旧单元格” - 这就是使表格视图运行良好的原因。当然,如果相关单元格具有转换视图,则会显示该视图。

因此,就像您在每次调用cellForItemAtIndexPath函数时也重新设置的单元格中的数据一样,您必须将正确的视图设置为可见 - 请记住像您一样的单元格视图的状态使用数据,然后在显示单元格时显示相应的视图。