0

ゲームコンソール、セットトップボックスなどのさまざまなデバイスのリモコンのように機能するアプリケーションに取り組んでいます.

アプリケーションには、リモートとしてイベントを実行するためのジェスチャーやボタンなど、さまざまな種類のコントロールが含まれています。

単一のジェスチャ ビューには、次のように複数のジェスチャ レコグナイザが含まれています。

  1. 1 本の指 UITapGestureRecognizer を使用してタップ

  2. UITapGestureRecognizer を使用した 2 本指のタップ

  3. UISwipeGestureRecognizer を使用した 1 本指のスワイプ

  4. UISwipeGestureRecognizer を使用した 2 本指のスワイプ

私の要件は、1 本の指のスワイプ ジェスチャ レコグナイザとホールド イベントを実装することです。したがって、ユーザーがビューから指を離さない限り、スワイプ アクションが続行されます。

UISwipeGestureRecognizer の後に UILongPressGestureRecognizer を試しましたが、スワイプの動きとともに実行されているため、これはうまくいきませんでした。そして、スワイプ終了後にこれが欲しいのですが、指が離れません。

私のコードスニペット:

-(void) gestureView:(UIView*)viewGesture {
    UISwipeGestureRecognizer *swipeGestureSingleRight;
    UISwipeGestureRecognizer *swipeGestureSingleLeft;
    UISwipeGestureRecognizer *swipeGestureSingleUp;
    UISwipeGestureRecognizer *swipeGestureSingleDown;

    swipeGestureSingleUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureSingle_Handle:)];
    [swipeGestureSingleUp setDelegate:self];
    [swipeGestureSingleUp setDirection:(UISwipeGestureRecognizerDirectionUp)];
    [swipeGestureSingleUp setNumberOfTouchesRequired:1];
    [viewGesture addGestureRecognizer:swipeGestureSingleUp];

    swipeGestureSingleDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureSingle_Handle:)];
    [swipeGestureSingleDown setDelegate:self];
    [swipeGestureSingleDown setDirection:(UISwipeGestureRecognizerDirectionDown)];
    [swipeGestureSingleDown setNumberOfTouchesRequired:1];
    [viewGesture addGestureRecognizer:swipeGestureSingleDown];

    swipeGestureSingleRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureSingle_Handle:)];
    [swipeGestureSingleRight setDelegate:self];
    [swipeGestureSingleRight setDirection:(UISwipeGestureRecognizerDirectionRight)];
    [swipeGestureSingleRight setNumberOfTouchesRequired:1];
    [viewGesture addGestureRecognizer:swipeGestureSingleRight];

    swipeGestureSingleLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureSingle_Handle:)];
    [swipeGestureSingleLeft setDelegate:self];
    [swipeGestureSingleLeft setDirection:(UISwipeGestureRecognizerDirectionLeft)];
    [swipeGestureSingleLeft setNumberOfTouchesRequired:1];
    [viewGesture addGestureRecognizer:swipeGestureSingleLeft];

    longPressGestureOnSwipe = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGesture_Handle:)];
    longPressGestureOnSwipe.minimumPressDuration = 0.03;
    longPressGestureOnSwipe.delegate = self;
    [viewGesture addGestureRecognizer:longPressGestureOnSwipe];
    isSwipeEnd = false;
    [longPressGestureOnSwipe setEnabled:isSwipeEnd];
}

- (void)swipeGestureSingle_Handle:(UISwipeGestureRecognizer*)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
        singleTouchSwipeSenderDirection = sender.direction;
        isSwipeEnd = true;
        [longPressGestureOnSwipe setEnabled:isSwipeEnd];
    }
}

-(void)longPressGesture_Handle:(UILongPressGestureRecognizer*)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
        isSwipeEnd = false;
        [longPressGestureOnSwipe setEnabled:isSwipeEnd];
    }
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
    if (isSwipeEnd) {
        [super touchesBegan:touches withEvent:event];
    } else {
        return;
    }
}

私の要件に対する修正または解決策を提案してください。

前もって感謝します!

4

0 に答える 0