私は透明なUIViewの下にUIScrollViewを持っています。私はすべてのパンとタップをスクロールビュー(水平方向にのみスクロール)に転送する必要があります。通常のUIViewでは、UIPanGestureRecognizerのサブクラスを使用して垂直パン(Subclass found here)を追跡します。オーバーレイビューでは、タッチイベントメソッドをオーバーライドしてUIScrollViewに渡します。別のUIViewの下でUIScrollViewにタッチ情報を渡す
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.scrollView.panGestureRecognizer touchesBegan:touches withEvent:event];
[self.scrollView.singleTapGesture touchesBegan:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesCancelled:touches withEvent:event];
[self.scrollView.panGestureRecognizer touchesCancelled:touches withEvent:event];
[self.scrollView.singleTapGesture touchesCancelled:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
[self.scrollView.panGestureRecognizer touchesEnded:touches withEvent:event];
[self.scrollView.singleTapGesture touchesEnded:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
[self.scrollView.panGestureRecognizer touchesMoved:touches withEvent:event];
[self.scrollView.singleTapGesture touchesMoved:touches withEvent:event];
}
オーバーレイビューは、垂直パンが完全に機能します。 UIScrollViewでは、タップも完全に機能します。しかしスクロールするほどではない。スクロールビューは約3点をスクロールし、次に停止します(水平のパンを続けると)。私がベロシティを放つと、スクロールビューはそのベロシティをピックアップしてスクロールします。
スクロール表示がスクロールを停止してからベロシティをピックアップする可能性のある問題は何ですか?
透明ビューは、スワイプなどの少なくとも1つのタイプのタッチに応答する必要があると仮定します。 –
Uhmm ...なぜあなたのスクロールが停止し、速度をピックアップするのか分かりませんが、私がやったことは..私のUIScrollViewはすべてのイベントを処理します。そのイベントをそのUIViewに渡すコールバック関数を作る...また、UIView ..のuserInteractionEnabledを無効にする。そうすれば、UIScrollViewはそれを想定した方法で動作する。UIViewは、UIScrollViewがキャッチして渡すために想定される唯一のイベントを処理するそれはUIViewに...多分あなたが戻ってそれを変更するには遅すぎるかもしれません..しかし、申し訳ありませんあなたの問題を解決する方法を知らない。 – chuthan20