Вращение UIRotationGestureRecognizer иногда сталкивается с очень большим значением - PullRequest
4 голосов
/ 28 ноября 2011

Я использую UIRotationGestureRecognizer для поворота UIImageView.Добавляя все небольшие изменения поворота к CGFloat, я пытаюсь вычислить общее вращение UIImageView.Это нормально, но каким-то образом свойство жеста rotation иногда имеет очень большое значение.Обычно при медленном вращении он находится около 0,00 ##, но затем неожиданно начинает давать значения, подобные 6. ##.Конечный результат составляет в общей сложности> 300 радиан, что смешно - более 47 «оборотов» при движении пальца всего на миллиметр.это?

Вот код:

if ([gesture state] == UIGestureRecognizerStateBegan || [gesture state] == UIGestureRecognizerStateChanged) 
{
    totalRotation += [gesture rotation];
    NSLog(@"%f", [gesture rotation]);

    [gesture view].transform = CGAffineTransformRotate([[gesture view] transform], [gesture rotation]);

    [gesture setRotation:0];
} 
else 
{
    NSLog(@"rot: %f", totalRotation);
}

1 Ответ

2 голосов
/ 04 декабря 2011

Я тоже это получаю. Значения 6. ## составляют около 2 * PI (то есть 360 градусов). Может быть +/- 6. ## по моему опыту. Я даже получил +/- 12. ## (4 * PI) Вместо того, чтобы тратить время на выяснение причин, я просто проверяю и исправляю:

CGFloat useRotation = gesture.rotation;

while( useRotation < -M_PI )
    useRotation += M_PI*2;

while( useRotation > M_PI )
    useRotation -= M_PI*2;

На самом деле вам не нужно этого делать, потому что вы используете угол напрямую. Грех (угол +/- PI * 2) = Грех (угол) и т. Д. Не беспокойтесь о 300 радианах, он все равно получит правильное преобразование. Но я делю угол на 2, так что это было проблемой для меня.

...