Say I have a UICollectionView using a UICollectionViewFlowLayout and the following format:
1 2 3
4 5 6
7 8 9
I touch cell 9 and drag it over ce
After much head banging, the solution I found is to use moveItemAtIndexPath:toIndexPath
inside of performBatchUpdates:completion
. According to the documentation for performBatchUpdates:completion
:
You can use this method in cases where you want to insert, delete, reload or move cells around the collection view in one single animated operation, as opposed to in several separate animations. Use the blocked passed in the updates parameter to specify all of the operations you want to perform.
So, what I essentially did was
[self performBatchUpdates:^{
[self moveItemAtIndexPath:fromIp toIndexPath:toIp];
[self moveItemAtIndexPath:toIp toIndexPath:fromIp];
} completion:^(BOOL finished) {
// update data source here
// e.g [dataSource exchangeObjectAtIndex:fromIp.row withObjectAtIndex:toIp.row];
}];