У меня есть небольшая проблема с распознавателями жестов.Панорамный жест беспорядочно направлен на направление вращения
У меня есть класс под названием «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]
}
Так в основном каждый из них прекрасно работает самостоятельно. Однако, когда я поворачиваю или изменяю размер изображения, панорамирование становится проблематичным. Например, если вы поворачиваете изображение вверх дном, то жесты панорамирования будут перемещать изображение в обратном направлении (вверх вниз, перетаскивание влево перемещает его вправо и т. Д.). Аналогично, измененный спрайт не будет качаться с той же скоростью/расстоянием, что и раньше.
Любые идеи о том, как я могу это исправить? Я бы предпочел сохранить этот код внутри класса Sprite, а не ViewController (если возможно). Спасибо.
Txs @Jerry, отличный ответ. Это сводило меня с ума! –
@Jerry, это хорошо работает ... –