web-dev-qa-db-ja.com

UIScrollViewの減速を無効にする

UIScrollViewの減速を無効にする方法はありますか?

ユーザーがキャンバスをスクロールできるようにしたいのですが、ユーザーが指を離した後もキャンバスがスクロールし続けるのは望ましくありません。

これは、UIScrollViewデリゲートメソッドscrollViewWillBeginDeceleratingを使用して、コンテンツオフセットを現在の画面位置に自動的に設定することで実行できます。

実装する:

  1. デリゲートをUIScrollViewオブジェクトに割り当てていない場合は割り当てます。
  2. 代理人の.m実装ファイル。次のコード行を追加します。

    -(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{  
        [scrollView setContentOffset:scrollView.contentOffset animated:YES];   
    }
    

出来上がり!自動スクロールはもうありません。

67
Mark

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の自動スクロールが停止します。

38
Quotation

あなたは非常に高い減速率を上げることができます。無限のレートで、それはすぐに止まります。レートを次の定数に設定してみてください:

scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;

そして

scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

それでもまだ高速では不十分な場合は、UIScrollViewDecelerationRateFastを浮動小数点数としてtypedefするだけなので、係数を10倍するだけでさらに高速化できます。

21
Dan Lorenc

DecelerationRateプロパティを0に設定するだけです

自動スクロールプロパティが無効になります。ただし、scrollview contentsizeが大きいと、ユーザーの操作が悪くなることに注意してください。

1
Emtiyaj Ali

前のSwiftバージョン:↓

scrollView.decelerationRate = UIScrollView.DecelerationRate.fast

現在Swift 4.2バージョンコード:↓

scrollView.decelerationRate = UIScrollViewDecelerationRateFast
0
Sai kumar Reddy