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 = scrollView.contentOffset;
}
現在のオフセットをtargetContentOffset
に割り当てると、UIScrollView
の自動スクロールが停止します。
あなたは非常に高い減速率を上げることができます。無限のレートで、それはすぐに止まります。レートを次の定数に設定してみてください:
scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
そして
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
それでもまだ高速では不十分な場合は、UIScrollViewDecelerationRateFastを浮動小数点数としてtypedefするだけなので、係数を10倍するだけでさらに高速化できます。
DecelerationRateプロパティを0に設定するだけです
自動スクロールプロパティが無効になります。ただし、scrollview contentsizeが大きいと、ユーザーの操作が悪くなることに注意してください。
前のSwiftバージョン:↓
scrollView.decelerationRate = UIScrollView.DecelerationRate.fast
現在Swift 4.2バージョンコード:↓
scrollView.decelerationRate = UIScrollViewDecelerationRateFast