UIScrollView проблема масштабирования с UIRotationGestureRecognizer - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть вид прокрутки, который показывает вид изображения. Я пытаюсь обработать UIRotationGestureRecognizer в представлении изображения. Я получаю событие для вращения и применяю требуемое преобразование к тому же. Изображение поворачивается в режиме прокрутки. Затем, когда я делаю какие-либо операции в представлении прокрутки, такие как масштабирование или панорамирование, поворот изображения и положение переходит к броску

_mainView - это подвид UIScrollView, который также используется для масштабирования

UIRotationGestureRecognizer *rotationGesture=[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGesture:)];    
[_mainView addGestureRecognizer:rotationGesture];    
[rotationGesture release];

-(void) rotationGesture:(UIRotationGestureRecognizer *) sender {    
    if(sender.state == UIGestureRecognizerStateBegan || 
       sender.state == UIGestureRecognizerStateChanged)
    {
        sender.view.transform = CGAffineTransformRotate(sender.view.transform, 
                                                            sender.rotation);
        _currRotation = _currRotation + sender.rotation;
        [sender setRotation:0];
    }
}

Мне хотелось бы понять, как правильно обращаться с вращением в представлении прокрутки, и оно поддерживает это вращение даже после событий масштабирования в представлении прокрутки.

1 Ответ

0 голосов
/ 17 ноября 2011

Реализуйте метод gestRecognizer: shouldRecognizeSimralleluallyWithGestureRecognizer: в своем UIGestureRecognizerDelegate и верните все жесты, которые вы хотите распознать одновременно .Если у вас все еще есть проблемы, проверьте ответы на UIImageView Gestures (Zoom, Rotate) Вопрос .

Удачи!

РЕДАКТИРОВАТЬ: Ваш комментарий заставляет меня догадываться, что проблема в том, что вы можете использовать только одно преобразование за раз, а представление прокрутки применяет преобразование масштаба, заменяя вращение.один.Вы можете удалить собственный распознаватель масштабирования (см. этот вопрос ) или вложить другой UIView в представление прокрутки и применить к нему преобразование вращения.Мне нравится второй вариант, кажется, проще.Если вы выберете первый вариант, используйте CGAffineTransformConcat, чтобы применить преобразования масштабирования и поворота независимо друг от друга.

...