2013-08-28 3 views
2

Возможно ли, что конкретный жест не сработает, так что распознается следующий возможный жест?совпадение с салфеткой и панорамой

быть более конкретным, посмотрите на образец фрагмент кода:

UISwipeGestureRecognizer *swipeLeft = [initialize UISwipeGestureRecognizer... @selector(handleSwipe:)] 

swipeLeft = UISwipeGestureRecognizerDirectionLeft; 

swipeLeft.delegate = self; 

UIPanGestureRecognizer *pan = [initialize UIPanGestureRecognizer... @selector(handlePan:)] 

pan.delegate = self; 

[pan requireGestureRecognizerToFail:swipeLeft]; 

выше код указывает, что если красть левый не распознается устройством, будет использоваться сковорода обработчик жестов.

спасибо.

ответ

11

Отъезд UIGestureRecognizerDelegate протокола здесь:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIGestureRecognizerDelegate_Protocol/Reference/Reference.html

В частности,

gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

метод может быть полезен. Если вы просто возвращаете YES из этого метода, оба жестова могут быть распознаны одновременно, поэтому вы можете правильно ответить на оба.

+0

распознавание одновременных жестов не дает мне желаемое поведение, что я стремлюсь. салфетки слева должны перемещать UIView из одного места в другое, а жест жеста перемещает его также, но на основе вашего панорамирования и скорости нажатия. Благодарю. – rgb

+0

Похоже, что распознаватель панорамирования может перемещать вид с вашим прикосновением, но затем, если обнаружено салфетки, вы можете установить флаг, указывающий, что кастрюля перестает работать, так как поведение салфетки возьмет верх. Считаете ли вы, что это может сделать то, что вы пытаетесь сделать? – Eric

+0

это отличная идея, и это то, чего я пытаюсь достичь, есть ли более простая реализация без написания или переопределения ваших собственных прикосновенийBegan, Moved, Ended методов для флага, и пусть текущий жест останавливается и переходит к следующему поведению? Благодарю. – rgb

0

Если у вас есть какой-то другой обработчик реализован для панорамирования жеста, вы не можете просто сделать:

-(void)handleSwipe:(id)sender { 

    if //criteria is met to ignore left swipe 
    { 
     [self handlePan:self]; 
    } 
} 

-(void)handlePan:(id)sender { 

    // handle pan gesture here 

} 
+0

это может работать, но handlePan (с его собственной реализацией touchhesBegan, Moved, Ended, которая немного сложна для noob) на самом деле используется в другой библиотеке, используемой в контроллере представления. Благодарю. – rgb