I have created a customlayout and set my cells position attribute in layoutAttributesForItemAtIndexPath
like this
attributes.center = CGPointMake
Maybe a different approach. Just override isSelected in the collectionViewCell.
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)
}
}
}
In this post UICollectionView: Animate cell size change on selection you can see an example on how to animate a size change.
I'm animating the attributes by using didSelectItemAtIndexPath in my UICollectionViewDelegate:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
[_collectionView.collectionViewLayout invalidateLayout];
UICollectionViewLayoutAttributes *newAttributes = [_collectionView layoutAttributesForItemAtIndexPath:indexPath];
//use new attributes for animation
}