4

静的セルを含むテーブルがあります。これらのセルの1つには、パンジェスチャ認識機能を備えたビューがあります。

テーブルビューを下にスクロールしているときに、パンジェスチャ認識機能を備えたビューでセルに到達すると、スクロールが機能しないようです。ビューの外側(横または上または下)をタッチすると、機能し、スクロールできます。ジェスチャレコグナイザーにifステートメントがあり、特定の領域がタッチされているかどうかをテストし、タッチされている場合はアクションを実行します。

この問題(http://stackoverflow.com/questions/3295239/uigesturerecognizer-blocking-table-view-scrolling)を確認しましたが、cancelsTouchesInViewをNOに設定しても機能しませんでした。また、状態プロパティを設定する場所がありません。メソッドを使用する- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer と、「otherGestureRecognizer」をどこから取得するか、またはそのメソッドを呼び出すオブジェクトがわかりません。

ジェスチャレコグナイザーを最初の引数として配置したくないと思います。テーブルビューのスクロールジェスチャ認識機能をotherGestureRecogniserとして使用しますが、それは正しいですか?もしそうなら、どうすればそれを取得できますか?

UIPanGestureRecognizer *windPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveWindHandle:)];

[self.windRangeView addGestureRecognizer:windPanGesture];

次に、moveWindHandleで:

 -(void)moveWindHandle:(UIPanGestureRecognizer *)gesture
{
    gesture.cancelsTouchesInView = NO;
    isMovingHandle = [self isPoint:startedTouchAt insideHandle:_toHandleWindImageView];
    if(isMovingHandle) {

        if(gesture.state == UIGestureRecognizerStateBegan) {
            //do stuff
        }
    } 
    else
    {
        //i want it to ignore this gesture and just scroll like normal if that is what hte user did
    }
}

tableviewcontrollerをUIGestureRecognizerDelegateとして設定しましたが、それをどうすればよいかわかりません。

4

1 に答える 1

8

を呼び出すのはあなたではありません-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:。そのメソッドはシステムによって呼び出されます。テーブルビューコントローラをウィンドウパンジェスチャのデリゲートとして設定する必要があります。

windPanGesture.delegate = self;

その時点で、パンを実行すると、システムは-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:、ジェスチャレコグナイザーを1つの引数として、スクロールビューのジェスチャレコグナイザーをもう1つの引数として、デリゲートメソッドを呼び出します。


アップデート

-gestureRecognizerShouldBegin:メソッドを実装し、特定の領域のいずれかにいない場合はNOを返すこともできます。

于 2012-10-10T12:01:33.203 に答える