Problem polega na tym, że umieszczasz UICollectionView wewnątrz UIContainerView, który rezyduje wewnątrz kontrolera UIViewController. Wymaga to kilku dodatkowych kroków, aby UICollectionView działał zgodnie z oczekiwaniami.
Dodaj poniższe linie do viewDidLoad w CollectionViewController:
self.collectionView!.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: "handleLongGesture:"))
Następnie dodać następującą funkcję do CollectionViewController:
func handleLongGesture(gesture: UILongPressGestureRecognizer)
{
switch(gesture.state)
{
case UIGestureRecognizerState.Began:
guard let selectedIndexPath = self.collectionView!.indexPathForItemAtPoint(gesture.locationInView(self.collectionView)) else
{
break
}
collectionView!.beginInteractiveMovementForItemAtIndexPath(selectedIndexPath)
case UIGestureRecognizerState.Changed:
collectionView!.updateInteractiveMovementTargetPosition(gesture.locationInView(gesture.view!))
case UIGestureRecognizerState.Ended:
collectionView!.endInteractiveMovement()
default:
collectionView!.cancelInteractiveMovement()
}
}
Wreszcie po prostu upewnij się, aby zaliczyć, aby zapewnić sobie poradzić DataSource poprawnie:
override func collectionView(collectionView: UICollectionView, moveItemAtIndexPath sourceIndexPath: NSIndexPath,toIndexPath destinationIndexPath: NSIndexPath) {
// Swap the values of the source and destination
}
Sprawdź to link, aby uzyskać więcej informacji na ten temat.
Mam nadzieję, że to pomogło.
Updated Przykład z roztworu przez @Scooter [tutaj] (https://github.com/jameszaghini/UICollectionViewController-reordering-problem/tree/fixed) –