1. ホーム
  2. iphone

[解決済み] UIScrollViewのスクロールをプログラムで強制終了するには?

2023-05-07 12:44:46

質問

で指定された回答 は私には機能しません。

私はUIScrollView(テーブルビューではなく、単なるカスタムもの)を持っており、ユーザーが特定のアクションを取るとき、私はビュー内の任意のスクロール(ドラッグまたは減速)を殺したいと思っています。私は、例えば、これを行うことを試みました。

[scrollView scrollRectToVisible:CGRectInset([scrollView bounds], 10, 10) animated:NO];

は、すでに可視であることが知られている矩形が与えられると、スクロールはちょうどその位置で停止するという理論に基づいていますが、これは何の効果もないことが判明しました。I である矩形を指定すると、スクロールが停止します。 の外側 の外側にあり、ビューのcontentSizeの内側にある矩形を与えると、スクロールが停止します。これは、期待どおりにビューを停止するようですが...また、他の場所にジャンプする原因となります。私はおそらく、余白で少し遊んで、これが合理的に問題なく動作するようにすることができますが、誰か、動作中のスクロールビューを停止させるきれいな方法を知っていますか?

ありがとうございます。

どのように解決するのですか?

あなたの元のソリューションで少し遊んでみましたが、これはうまくいくようです。ほとんどできていたと思いますが、使用した rect をオフセットしすぎていて、元の rect に戻るように rect をまっすぐスクロールできることを忘れていたのだと思います。

あらゆるスクロール操作に対する一般化された解決策はこれです。

- (void)killScroll 
{
    CGPoint offset = scrollView.contentOffset;
    offset.x -= 1.0;
    offset.y -= 1.0;
    [scrollView setContentOffset:offset animated:NO];
    offset.x += 1.0;
    offset.y += 1.0;
    [scrollView setContentOffset:offset animated:NO];
}

[編集] iOS 4.3 (およびそれ以前) では、これも動作するようです。

- (void)killScroll 
{
    CGPoint offset = scrollView.contentOffset;
    [scrollView setContentOffset:offset animated:NO];
}