2013-04-11 6 views
2

Я вижу много вопросов об этом в Интернете, и особенно в StackOverflow. Я тестирую многие ответы, но в моем случае ничего не работает.shouldReceiveTouch не называется

Мой класс реализует протокол UIGestureRecognizerDelegate:

@interface CDMapViewController : CDViewController <UIGestureRecognizerDelegate> 

Следующий метод писал из Xcode автозавершения в @implentation моего класса

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldReceiveTouch:(UITouch *)touch { 
    NSLog(@"not called"); 
    return NO; 
} 

я правильно инициализировать UIGestureRecognizer в первом методе, который правильно вызывать второй, третий и четвертый методы:

- (void)initGestureOnMap { 
    UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] init]; 
    gestureRecognizer.delegate = self; 
    [self.view addGestureRecognizer:gestureRecognizer]; 
} 

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    gesture_dragging = NO; 
} 

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesMoved:touches withEvent:event]; 
    gesture_dragging = YES; 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    if (gesture_dragging || [touches count] != 1) return; 
     /* bla bla bla */ 
} 

... Это не журнал - не называется ... почему?

+1

Атрибуты распознавания жестов должны были заменить 'touchhesBegan:' и все эти методы. Обычно вам нужно только реализовать тот или иной. –

ответ

2

Вы должны позвонить super для методов touches.

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    gesture_dragging = NO; 
} 

... and so on. 

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

Выберите, какой жест вы хотите. Сам по себе, UIGestureRecognizer не делает много, поэтому выберите один, как UITapGestureRecognizer. Затем выполните свой распознаватель жестов с помощью назначенного инициализатора.

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myMethod:)]; 

И, наконец, осуществить myMethod:.

-(void)myMethod:(UITapGestureRecognizer *)recognizer 
{ 
    // Whatever this does. 
} 
+0

Спасибо за быстрый ответ, я делаю это сейчас ... Но это не решает проблему. Он не вызывает функцию shouldReceiveTouch –

+0

Какой жест вы ищете? Кран? Вам нужно использовать подкласс 'UIGestureRecognizer'. –

+0

Да, я хотел бы поймать кран, но на MKMapView можно выбрать наложение. И я хотел бы позвонить shouldReceiveTouch, чтобы отключить прикосновение к информационной панели поверх mapView. –

Смежные вопросы