UIScrollView 内で UIView をドラッグ アンド ドロップしようとしています。ScrollView の上部または下部と交差するように UIView をドラッグすると、UIScrollView をスクロールしたいと思います。上部に触れると、上にスクロールする必要があります。最下部に達した場合は、下にスクロールする必要があります。UIView が上部または下部と交差しなくなるように移動すると、スクロールが停止します。
私が試した最初のアプローチは、UIView がスクロールビューの上部または下部と交差したことを検出するたびに NSTimer を開始することでした。タイマーは、無効になるまで UIScrollView を少しずつスクロールします。これにより、タイマーがいつ起動するかを予測する方法がないため、非常にぎくしゃくしたスクロールが発生しました。
私の現在のアプローチは、次のように、ScrollView の上部または下部まで単純にスクロールすることです。
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];
[self.parentScrollview setContentOffset:newOffset animated:NO];
[UIView commitAnimations];
スクロールを停止するために、touchesMoved: デリゲートでタッチの位置を特定し、それを使用して scrollView に使用する contentOffset を計算します。
問題は、[[touches anyObject] locationInView:self] を介してビュー内の位置を取得しようとすると、現在の位置ではなく、最終的な終了位置を取得することです。scrollView の contentOffset がすぐに設定されるためだと思います。
このような状況でタッチの実際の位置を取得する方法はありますか? または、スクロールアニメーションを中断するときに contentOffset を設定する他の方法はありますか?