UIScrollView, PanGestureRecognizer и iOs 4 - PullRequest
1 голос
/ 10 января 2012

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

Я использовал этот код:

UISwipeGestureRecognizer *upRecognizer = 
    [[UISwipeGestureRecognizer alloc] initWithTarget:self 
                                              action:@selector(upSwipeHandle:)];
upRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
[upRecognizer setNumberOfTouchesRequired:2];
[controller.view addGestureRecognizer:upRecognizer];
[[controller.scrollView panGestureRecognizer]
    requireGestureRecognizerToFail:upRecognizer];

Но, похоже, работаеттолько в iOS 5. Как я могу использовать тот же распознаватель в iOS 4?

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Я решаю свою проблему, используя метод делегата UIGestureRecognizer.

просто добавьте

upRecognizer.delegate = self;

и этот метод:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    if ([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        return YES;
    }

    return NO;
}  
0 голосов
/ 25 июня 2012

Я столкнулся с той же проблемой. Я запустил подобный код в симуляторе 4.3, и этот код не удался, потому что scrollView.panGestureRecognizer доступен только в iOS 5.0 +.

Я решил это, добавив категорию в UIScrollView.

@interface UIScrollView(panGestureRecognizer)
@end
@implementation UIScrollView(panGestureRecognizer)
// iOS5 has a panGestureRecognizer property
// Add a getter for iOS 4.3+
- (UIPanGestureRecognizer *)panGestureRecognizer
{
    for (UIGestureRecognizer *gestureRecognizer in self.gestureRecognizers)
    {
        if ([gestureRecognizer isKindOfClass: [UIPanGestureRecognizer class]]) {
            return (UIPanGestureRecognizer *)gestureRecognizer;
        }
    }
    return nil;
}
@end
...