十分にドラッグしない場合は、UIScrollView のコンテンツ オフセットを元に戻したい:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(CGPoint *)targetContentOffset {
self.endingOffset = scrollView.contentOffset;
if(abs(verticalOffset) > [self cellHeight] / 9) { // If the user scrolled enough distance, attempt to scroll to the next cell
...
} else if(self.nextCellOrigin.y != 0) { // The scroll view is still scrolling and the user didn't drag enough
...
} else { // If the user didn't drag enough
self.tableView.decelerationRate = UIScrollViewDecelerationRateNormal;
(*targetContentOffset) = self.startingOffset;
}
}
元の位置に戻すコードはelse部分にあり、常に機能します。ただし、十分にスクロールせずにジェスチャをすばやく行うと、元に戻ります。少しスクロールして、その位置を通常より少し長く保持すると、スムーズに元に戻ります。
ユーザーが UIScrollView に触れた時間について、API リファレンスには何も見つかりませんでした。たとえ触れたとしても、それを使用して元に戻すコードの動作を変更する方法がすぐにはわかりません。また、 setContentOffset:animated: を使用してその位置までスクロールしようとしましたが、ジャーキネスは修正されていないようです。
何か案は?