Я приложил следующий жест распознавани на мой взгляд, коллекция:IUICollectionViewDelegateFlowLayout перетащить особенность: Клетка ниже сотовой ячейки, долго нажимается становится перемещается
public void AttachLongPressGestureRecognizer()
{
// Create a custom gesture recognizer
var longPressGesture = new UILongPressGestureRecognizer((gesture) =>
{
// Take action based on state
switch (gesture.State)
{
case UIGestureRecognizerState.Began:
var selectedIndexPath = this.MyCollectionView.IndexPathForItemAtPoint(gesture.LocationInView(View));
if (selectedIndexPath != null)
{
this.MyCollectionView.BeginInteractiveMovementForItem(selectedIndexPath);
}
break;
case UIGestureRecognizerState.Changed:
this.MyCollectionView.UpdateInteractiveMovement(gesture.LocationInView(View));
break;
case UIGestureRecognizerState.Ended:
this.MyCollectionView.EndInteractiveMovement();
break;
default:
this.MyCollectionView.CancelInteractiveMovement();
break;
}
});
В то время как перетащить функция, кажется, работает, но полученный selectedIndexPath неверен. Когда я долго нажимаю на определенную ячейку, ячейку под ней выбирают и перемещают. Я использую следующее, чтобы изменить размер ячеек в зависимости от размера экрана:
[Export("collectionView:layout:sizeForItemAtIndexPath:")]
public CoreGraphics.CGSize GetSizeForItem(UICollectionView collectionView, UICollectionViewLayout layout, NSIndexPath indexPath)
{
var cellHeight = collectionView.Frame.Height * 0.3;
var cellWidth = collectionView.Frame.Width * 0.45;
return new CoreGraphics.CGSize(cellWidth, cellHeight);
}
Одно касания на один и те же клетки возвращает правильный indexPath, но длительное нажатие возвращает indexPath ячейки ниже ячеек нажато.