7

3秒ごとに次の「ページ」に自動的に進むスクロールビューがあります(ページコントロールも使用されます)。ただし、ユーザーがスクロールビューに触れたら、自動進行を停止したいと思います。

スクロールビューをサブクラス化しました。サブクラスで touchesBegan を検出できますが、touchesMoved は呼び出されないため、ユーザーがスクロールビューを手動でスワイプしたかどうかはわかりません。自動進行タイマーが起動したときに contentOffset を設定すると呼び出されるため、scrollviewDidScroll は使用できません。

では、タッチを検出するための他のオプションは何ですか? scrollview サブクラスで touchesMoved が呼び出されないのはなぜですか?

4

3 に答える 3

7

提案していただきありがとうございます。彼らは私がこの簡単な解決策に出くわすのを助けました:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.scrollTimer invalidate];
}
于 2012-06-15T15:51:05.470 に答える
2

次のデリゲートメソッドを調べることをお勧めします。

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

Appleごと:

スクロールビューは、UIScrollViewおよびsetContentOffset:animated:メソッドとscrollRectToVisible:animated:メソッドの実装の最後にこのメソッドを呼び出しますが、アニメーションが要求された場合に限ります。

そのため、デリゲートメソッドは、プログラムによるスクロールが発生したときにのみ呼び出されます。そのメソッドで自動スクロール呼び出しを設定し、一部のBOOLがfalseの場合にのみ呼び出すことができます。タッチイベントでそのBOOLをtrueに設定します。

または完全に異なるもの=]

ただし、これは便利なデリゲートメソッドです。

〜頑張って

于 2012-06-15T05:55:12.503 に答える
1

スクロールビューは、おそらくタッチ入力を受け取るサブビューを指定します — UIKit オブジェクトは、この種のことに非常にうるさく、通常、転送されたイベントを処理することさえできません。

あなたがおそらくやりたいことは、またはのいずれかをキー値で観察するtrackingことdraggingです(そして、後者が必要なように思えます)。関連するプロパティが true に変化すると、ユーザーがスクロールを開始したことがわかります。

于 2012-06-15T05:46:54.683 に答える