在选择时为uicollectionview单元设置动画

时间:2012-10-14 18:06:04

标签: ios ios6 uicollectionview uicollectionviewcell

我已经创建了一个customlayout并在layoutAttributesForItemAtIndexPath中设置了我的单元格位置属性,就像这样

attributes.center = CGPointMake((size.width/2 - 100) + 100, (size.height/2 - 150) +100);

我想在选中单元格时为其设置动画。复制我们使用initialLayoutAttributesForAppearingItemAtIndexPath& finalLayoutAttributesForDisappearingItemAtIndexPath

我想在选择和取消选择单元格时执行此操作。

所以例如:

单元格A位于0,0位置。单元格B处于50,100的位置。如果我选择单元格B,我想将其设置为0,0。同时将单元格A设置为50,100的动画。基本上切换位置,但动画。

2 个答案:

答案 0 :(得分:1)

也许是一种不同的方法。只需覆盖collectionViewCell中的isSelected。

 override var isHighlighted: Bool {
    didSet {
        if isHighlighted {
            UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations: {
                // animate highlight
            }, completion: nil)
        } else {
            UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations: {
                // animate unHighligh
            }, completion: nil)
        }
    }
}

在这篇文章UICollectionView: Animate cell size change on selection中,您可以看到有关如何设置尺寸更改动画的示例。

答案 1 :(得分:0)

我通过在UICollectionViewDelegate中使用didSelectItemAtIndexPath来设置属性的动画:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    [_collectionView.collectionViewLayout invalidateLayout];
    UICollectionViewLayoutAttributes *newAttributes = [_collectionView layoutAttributesForItemAtIndexPath:indexPath];

    //use new attributes for animation
}