4

画面上の位置に応じてサブビューを変更UIScrollViewし、上に移動すると小さくなり、下に移動すると大きくなるようにする必要があります。

すべてのピクセルの変化でcontentOffsetを知る方法はありますか?私はメソッドをキャッチしscrollViewDidScroll:ますが、動きが速いときはいつでも、2つの呼び出しの間に約200pxlsの変化があるかもしれません。

何か案は?

4

1 に答える 1

3

基本的に2つのアプローチがあります。

  1. サブクラスUIScrollViewとオーバーライドtouchesBegan/Moved/Ended;

  2. UIPanGestureRecognizer現在のに自分自身を追加しますUIScrollView

  3. タイマーを設定し、タイマーが起動するたびに、ビューの読み取り値を更新します_scrollview.contentOffset.x

最初のケースでは、タッチ処理方法を実行します。

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {

UITouch* touch = [touches anyObject];
   _initialLocation = [touch locationInView:self.view];
   _initialTime = touch.timestamp;

   <more processing here>

  //-- this will make the touch be processed as if your own logics were not there
  [super touchesBegan:touches withEvent:event];
}

私はあなたがそれをする必要があるとかなり確信していtouchesMovedます; ジェスチャーの開始時または終了時に特定の何かを行う必要があるかどうかもわかりません。その場合もオーバーライドtouchesMoved:touchesEnded:。また、について考えてtouchesCancelled:ください。

2番目のケースでは、次のようにします。

//-- add somewhere the gesture recognizer to the scroll view
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
panRecognizer.delegate = self;
[scrollView addGestureRecognizer:panRecognizer];

//-- define this delegate method inside the same class to make both your gesture
//-- recognizer and UIScrollView's own work together
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
   return TRUE;
}

3番目のケースは、実装するのが非常に簡単です。他の2つよりも良い結果が得られるかどうかはわかりません。

于 2013-01-21T09:09:24.893 に答える