如何在选择时更改UICollectionView的单元格?

时间:2014-07-09 14:53:37

标签: animation uicollectionview uicollectionviewcell

我想改变,动画,"外观"选择UICollectionViewCell时(使用更多子视图使其更大)到目前为止,我尝试了很多东西,但没有一个能够奏效。

你认为这是可能的吗?如果是的话,你会怎么做?

非常感谢有关此主题的任何帮助; - )


我看到两种可能性:

  • 第一种方法:注册两种单元格并在方法中进行更改

    - (void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

但是使用这个解决方案,动画不会像其他方法一样干净。

  • 第二种方法:保持相同的单元格,但在布局中进行更改等。再次,使用相同的方法:

代码:

- (void)   collectionView:(UICollectionView *)collectionView
 didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath * previousSelectedIndexPath = self.selectedIndexPath ;

    UICollectionViewCell * previousSelectedCell ;

    if (previousSelectedIndexPath)
    {
        previousSelectedCell = [collectionView.dataSource collectionView:self.collectionView
                                        cellForItemAtIndexPath:previousSelectedIndexPath] ;
    }

    UICollectionViewCell * selectedCell =
    [collectionView.dataSource collectionView:self.collectionView
                       cellForItemAtIndexPath:indexPath] ;

    [UIView animateWithDuration:1
                          delay:0
                        options:0
                     animations:^{                         
                         selectedCell.height = 20 ;
                         [self.collectionView layoutIfNeeded] ;
                 //[self.collectionView performBatchUpdates:^{
                 //    // what here?
               //} completion:nil] ; <- does not change anything

   //[self.collectionView reloadData] ;  <- does not change anything either

                     } completion:^(BOOL finished) {
                         //
                     }] ;

    self.selectedIndexPath = indexPath ;
}`

PS:如果可能的话,我希望控制动画的持续时间。

1 个答案:

答案 0 :(得分:0)

不确定这是最好的方法,但我通过继承UICollectionViewCell并覆盖

来做这种事情
-(void)setSelected:(BOOL)selected
{
    [super setSelected:selected];
    // start your animation and add your subviews here
}

这样做,你必须能够在你的单元格被回收时“恢复”你选择的状态,所以你需要能够从- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath回到你选择的状态而不使用动画< / p>