UIScrollViewの減速を非アクティブ化する方法はありますか?
ユーザーがキャンバスをスクロールできるようにしたいのですが、ユーザーが指を離した後もキャンバスがスクロールし続けることを望んでいません。
UIScrollViewの減速を非アクティブ化する方法はありますか?
ユーザーがキャンバスをスクロールできるようにしたいのですが、ユーザーが指を離した後もキャンバスがスクロールし続けることを望んでいません。
これは、UIScrollView
デリゲートメソッドscrollViewWillBeginDecelerating
を利用して、コンテンツオフセットを現在の画面位置に自動的に設定することで実行できます。
実装する:
UIScrollView
まだ行っていない場合は、オブジェクトにデリゲートを割り当てます。デリゲートの.m
実装ファイルに、次のコード行を追加します。
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
[scrollView setContentOffset:scrollView.contentOffset animated:YES];
}
出来上がり!自動スクロールはもう必要ありません。
iOS 5.0以降の場合、を呼び出すよりも優れた方法がありsetContentOffset:animated:
ます。
ファイルにデリゲートメソッドを実装scrollViewWillEndDragging:withVelocity:targetContentOffset:
します。.m
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
targetContentOffset.pointee = scrollView.contentOffset;
}
現在のオフセットをに割り当てると、自動スクロールtargetContentOffset
が停止します。UIScrollView
減速率を非常に高くすることができます。無限のレートで、それはすぐに停止します。レートを次の定数に設定してみてください。
scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
と
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
それでも高速では不十分な場合は、UIScrollViewDecelerationRateFastはfloatとしてtypedefされるだけなので、10倍程度で乗算するだけで、さらに高速化できます。
densityageRateプロパティを0に設定するだけです
自動スクロールプロパティが無効になります。ただし、scrollview contentsizeが大きいと、ユーザーの操作が悪くなることに注意してください。