Я работал на вращающемся колесе, похожем на колесо фортуны. Я почти сломал его, но затем ударил кирпичную стену. Та же проблема, что и упомянутая в этом этом посте. Анимация колеса должна двигаться вперед и назад, как если бы она генерировала импульс, и при отпускании она будет вращаться по часовой стрелке.
У меня все это работает, однако, при первом касании колесо прыгает, поскольку его отправная точка стала от того места, где касался мой палец, а не от его текущего положения стоя. Я понимаю, почему он это делает, но я понятия не имею, как сделать так, чтобы не было прыжка.
Я видел предложения по использованию 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));
}