0

私はUIScrollView内にサブビューを持っています。サブビュー内には、複数のボタンがある画像があります。私は2つの指スワイプジェスチャーをコード化して、ユーザーが上下左右にスワイプして別のビューをナビゲーションコントローラーにポップすることができるようにしました。ビューが読み込まれると、簡単にスワイプすることができ、期待どおりに機能します。しかし、ズームインしたり、途中で外したりすると、2本の指のスワイプジェスチャは無視されます。私が運が良ければ、ズームイン/アウト時に認識されることがありますが、そのような動作をユーザーに許可することはできません。誰でも助けてくれますか?ありがとうございました。ズーム時にスウィープジェスチャーが機能しない

+0

既に試したコードを共有できますか? –

答えて

0

私はジェスチャー認識デリゲートメソッドのrequireGestureRecognizerToFailを使用してそれを理解することができました。私はすべての方向に2本の指のスワイプが必要でした。最初にパンジェスチャ認識機能を作成し、最小値と最大値の適切な量を設定しました。パンジェスチャーのデリゲートを自分に設定し、各スワイプジェスチャーにrequireGestureRecognizerToFailを設定する必要があります。スワイプジェスチャーコレクションを渡すことを忘れないでください.SimultaneouslyWithGestureRecognizerを再認識してください。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    scrollView.contentSize = CGSizeMake(image.frame.size.width, image.frame.size.height); 
    scrollView.maximumZoomScale = 4; 
    scrollView.minimumZoomScale = 1; 
    scrollView.delegate = self; 

    UIPanGestureRecognizer *TwoFingerPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(HandlePanGesture:)]; 
    TwoFingerPanGesture.minimumNumberOfTouches=2; 
    TwoFingerPanGesture.maximumNumberOfTouches=2; 
    [TwoFingerPanGesture setDelegate:self]; 
    [scrollView addGestureRecognizer:TwoFingerPanGesture]; 

    UISwipeGestureRecognizer *TwoFingerSwipeDownGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)]; 
    TwoFingerSwipeDownGesture.direction = UISwipeGestureRecognizerDirectionDown; 
    TwoFingerSwipeDownGesture.numberOfTouchesRequired = 2 ; 
    [TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeDownGesture]; 
    [scrollView addGestureRecognizer:TwoFingerSwipeDownGesture]; 

    UISwipeGestureRecognizer *TwoFingerSwipeUpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)]; 
    TwoFingerSwipeUpGesture.direction = UISwipeGestureRecognizerDirectionUp; 
    TwoFingerSwipeUpGesture.numberOfTouchesRequired = 2; 
    [TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeUpGesture]; 
    [scrollView addGestureRecognizer:TwoFingerSwipeUpGesture]; 

    UISwipeGestureRecognizer *TwoFingerSwipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)]; 
    TwoFingerSwipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft; 
    TwoFingerSwipeLeftGesture.numberOfTouchesRequired = 2; 
    [TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeLeftGesture]; 
    [scrollView addGestureRecognizer:TwoFingerSwipeLeftGesture]; 

    UISwipeGestureRecognizer *TwoFingerSwipeRightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)]; 
    TwoFingerSwipeRightGesture.direction = UISwipeGestureRecognizerDirectionRight; 
    TwoFingerSwipeRightGesture.numberOfTouchesRequired = 2; 
    [TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeRightGesture]; 
    [scrollView addGestureRecognizer:TwoFingerSwipeRightGesture]; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    // Either just return YES to allow your cell's gesture recognizer 
    // to work simultaneously with all other recognizers: 
    //return YES; 

    // Or you can decide whether your cell's pan gesture recognizer should 
    // recognize simultaneously with otherGestureRecognizer. For example, 
    // you could get a reference to your collection view's panGestureRecognizer 
    // and only return YES if otherGestureRecognizer is equal to that recognizer: 
    return otherGestureRecognizer == scrollView.gestureRecognizers; 
} 
関連する問題