Поворот вида с помощью CGAffineTransformRotate

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

- (void)handleJogShuttle:(UIPanGestureRecognizer *)recognizer {

    UIView *shuttle = [recognizer view];

    if ([recognizer state] == UIGestureRecognizerStateBegan ||
        [recognizer state] == UIGestureRecognizerStateChanged) {

        [recognizer view].transform = CGAffineTransformRotate([[recognizer view] transform],M_PI / 20.0f);
        [recognizer setTranslation:CGPointZero inView:[shuttle superview]];
    }
}

Кроме того, в настоящее время малейшее движение может привести к вращению представления по полному кругу, что, очевидно, нежелательно.


person joec    schedule 30.07.2010    source источник


Ответы (1)


Я подозреваю, что этот метод называется МНОГО. Попробуйте использовать NSLog и проверьте, сколько раз это происходит. В любом случае, вы не правильно вычисляете угол, вы можете попробовать использовать

-(CGPoint)translationInView:(UIView *)view

от распознавателя, чтобы вычислить правильный угол поворота.

person Paulo Casaretto    schedule 30.07.2010
comment
Как мне использовать translationInView, поскольку он возвращает CGPoint, а не угол? Благодарность - person joec; 02.08.2010
comment
Узнайте центр вашего круга и вычислите угол от предыдущей точки до текущей с помощью арксинуса нашего арккосинуса. Это не слишком сложно, но вам придется компенсировать радиальное смещение. Мне трудно объяснить это здесь. - person Paulo Casaretto; 16.08.2010