2016-12-28 10 views
2

私は、スクロール時にアニメーションを実行するcollectionviewを持っています。しかし、このアニメーションが進行している間、私はスクロールを止めるために画面に触れることができません。私はスクロールが完全に停止するのを待たなければなりません。CollectionViewに触れたときにアニメーションを無効にしますか?

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 

    let cellsAcross: CGFloat = 1 
    let spaceBetweenCells: CGFloat = 1 
    let dim = (collectionView.bounds.width - (cellsAcross - 1) * spaceBetweenCells)/cellsAcross 
    let finalCellFrame = cell.frame 
    //check the scrolling direction to verify from which side of the screen the cell should come. 
    let translation = collectionView.panGestureRecognizer.translation(in: collectionView.superview!) 
    if translation.x > 0 { 
     cell.frame = CGRect(x: CGFloat(4), y: CGFloat(finalCellFrame.origin.y), width: CGFloat(dim), height: CGFloat(44)) 
    } else { 
     cell.frame = CGRect(x: CGFloat(4), y: CGFloat(finalCellFrame.origin.y), width: CGFloat(dim), height: CGFloat(44)) 
    } 
    UIView.animate(withDuration: 0.25, delay: 0.4, animations: {(_: Void) -> Void in 
     cell.frame = finalCellFrame 
    }) 

} 

アニメーションを削除すると、いつでも指が画面に触れるときにスクロールを中断することができます。アニメーションを維持しながらスクロールを中断するにはどうすればよいですか?

答えて

2

は、問題を修正する必要がありますオプションとして.allowUserInteractionを追加

UIView.animate(withDuration: 0.25, delay: 0.4, options: .allowUserInteraction, animations: { 

     cell.frame = finalCellFrame 

     }, completion: nil) 
    }) 

UIView.animate(withDuration: 0.25, delay: 0.4, animations: {(_: Void) -> Void in 
     cell.frame = finalCellFrame 
}) 

からあなたのアニメーションブロックを変更してみてください。

+0

ああ!そのような簡単な解決策!それはトリックはあなたに感謝しました! – user4938361

関連する問題