Поворот изображения с помощью CGAffineTransformMakeRotation - PullRequest
0 голосов
/ 14 июля 2011

Я работал на вращающемся колесе, похожем на колесо фортуны. Я почти сломал его, но затем ударил кирпичную стену. Та же проблема, что и упомянутая в этом этом посте. Анимация колеса должна двигаться вперед и назад, как если бы она генерировала импульс, и при отпускании она будет вращаться по часовой стрелке.

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

Я видел предложения по использованию UIRotateGestureRecognizer, проблема, с которой я столкнулся, это; по мере того, как вы поворачиваете приращение градусов и анимация ускоряется, при движении в противоположном направлении вы должны уменьшать значение от того уровня, в котором вы находитесь в это время, что означает, что анимация движется в неправильном направлении от того, что вы делаете, пока вы не уменьшите до отрицательная степень. Я уверен, что возможно исправить эти проблемы, но я так близок с моим текущим идентификатором решения, а не переписываю, если есть решение.

Я понимаю, что для другого поста использование totalRadians было решением, для меня оно не разрешало анимацию против часовой стрелки.

    totalRadians += fabs(theAngle - totalRadians);
    totalRadians = fmod(totalRadians, 2*M_PI);

Это то, что у меня есть.

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:wheelImage];
xleg = location.x-starttoset.x;
yleg = location.y-starttoset.y; 
swipetimer = CFAbsoluteTimeGetCurrent();
CGAffineTransform transforms;

location = [touch locationInView:wheelImage];
float theAngle = atan2( location.y-wheelImage.center.y, location.x-wheelImage.center.x );


transforms = CGAffineTransformConcat(spinningWheelImage.transform,CGAffineTransformMakeRotation(theAngle));

}

1 Ответ

0 голосов
/ 14 июля 2011

Чтобы предотвратить прыжок, вы должны отслеживать положение, когда касание начинает двигаться, а не когда это происходит впервые.

...