2011-02-07 3 views
0

Я приложил к экрану жест и жест. Я хочу координировать их так, что когда каждый полный один цикл состояния «UIGestureRecognizerStateChanged» я хочу выполнить скоординированное действие, которое агрегирует обновленную информацию от каждого. В частности, моя панорама управляет переводом, а мой щипчик контролирует масштаб. Я хочу сделать инкрементную конкатенацию матрицы как в переводе, так и в масштабе в одном месте, а затем каждый конкатенат автономно, что приводит к неприятному движению типа ступеньки.Как я могу координировать поведение двух UIGestureRecognizers?

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

Спасибо,
Doug

ответ

0

Первое, что нужно попробовать удостоверяется в распознования работают «одновременно». В делегата, необходимо определить следующее:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{   
    return (gestureRecognizer.view == otherGestureRecognizer.view); 
} 

В моем опыте, что достаточно, чтобы дать адекватно гладкий опыт. Однако, если это не так, то то, что я сделал бы, это только обновить ваш переход от одного из распознавателей, сохранив состояние от другого в свойстве. Предположим, что вы объявили свойство CGFloat cachedScale, которое вы установили в ваш инициализатор 1.0. Затем в крайнем случае и панорамирование обработчиков, вы могли бы сделать следующее:

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer 
{  
    self.cachedScale *= recognizer.scale; 
} 

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer 
{ 
    CGAffineTransform transform = CGAffineTransformMakeScale(self.cachedScale, self.cachedScale); 
    self.cachedScale = 1.0; 

    CGPoint translation = [recognizer translationInView:recognizer.view.superview]; 
    CGAffineTransformTranslate(transform, translation.x, translation.y); 

    // do something with your transform 
} 

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

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