2012-01-22 2 views
1

У меня есть карта 2d, которую пользователь может масштабировать и панорамировать с помощью распознавателей жестов. Пока он работает, я хочу, чтобы пользователь начал панорамирование сразу после масштабирования, когда у них есть 1 палец. К сожалению, в документации говорится:отключить распознаватель пинча при поднятии 1 пальца на экране

Жест заканчивается (UIGestureRecognizerStateEnded), когда оба пальца подъема с точки зрения.

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

ответ

5

Это возможно и легко! Это связано с тем, что вы являетесь делегатом вашего распознавателя жестов. Кажется, что-то, что никто не знает. На мой взгляд контроллера подкласса Я предрек и в соответствии с протоколом <UIGestureRecognizerDelegate> и два Ивар:

UIPinchGestureRecognizer *myPinchGR; 
UIPanGestureRecognizer *myPanGR; 

Эти Ивар инстанцируются ввиду сделал нагрузки. Обратите внимание на настройку self как делегата.

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    myPanGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTarget:)]; 
    myPanGR.delegate = self; 
    [self.view addGestureRecognizer:myPanGR]; 

    myPinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchTarget:)]; 
    myPinchGR.delegate = self; 
    [self.view addGestureRecognizer:myPinchGR]; 
} 

Один из делегатов вызовов, сделанных UIGestureRecognizer является shouldRecognizeSimultaneouslyWithGestureRecognizer:, если у меня было больше, чем два жеста распознования то эта функция должна была бы содержать некоторую логику. Но, поскольку есть только два, я могу просто вернуть YES.

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

Теперь вы должны включить немного (очень мало) дополнительную логику в своих методах действий на экран для соответствующих условий.

-(void)panTarget:(UIPanGestureRecognizer *)panGR{ 
    if (panGR.numberOfTouches > 1) return; 
    NSLog(@"panny"); 
} 
-(void)pinchTarget:(UIPinchGestureRecognizer *)pinchGR{ 
    if (pinchGR.numberOfTouches < 2) return; 
    NSLog(@"pinchy"); 
} 

Запустить этот код, посмотреть журналы. вы увидите, когда вы переместите один палец, вы увидите «паню», когда вы поместите второй палец вниз, вы увидите «щепотку», и вперед и назад.

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