Жест панорамирования меняет направление из-за поворота

У меня небольшая проблема с распознавателями жестов.

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

Вот мой код:

    -(void)setup{ //sets up the imageview...
//add the image, frame, etc.
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
    UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)];

    [self addGestureRecognizer:panGesture];
    [self addGestureRecognizer:pinchGesture];
    [self addGestureRecognizer:rotateGesture];
}

//handling methods
-(void)handlePinch:(UIPinchGestureRecognizer *)recognizer{
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;
}

-(void)handleRotate:(UIRotationGestureRecognizer *)recognizer{
    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation = 0;
}
-(void)handlePan:(UIPanGestureRecognizer *)recognizer{
    CGPoint translation = [recognizer translationInView:self];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self]
}

В общем, каждый из них отлично работает сам по себе. Однако, когда я поворачиваю или изменяю размер imageView, панорамирование становится проблематичным. Например, если вы поворачиваете imageView вверх ногами, жесты панорамирования перемещают изображение в обратном направлении (вверх - вниз, перетаскивание влево перемещает его вправо и т. Д.). Точно так же спрайт с измененным размером не будет панорамироваться с той же скоростью / расстоянием, что и раньше.

Есть идеи, как я могу это исправить? Я бы предпочел сохранить этот код в классе Sprite, а не в ViewController (если возможно). Спасибо.

9
задан user339946 8 January 2012 в 22:21
поделиться