Кажется, у вас есть какая-то ошибка в логике вашей программы. Я бы переписал
for ( d = 0; d <= deposits; ++d )
{
printf ("\nEnter the number of deposits (0-5):");
scanf ("%i", &d);
deposits = deposits + d;
if ( deposits > 5 || deposits < 0 )
{
printf ("*** Invalid number of deposits, please re-enter.");
deposits = deposits - d;
}/*end of if statement for deposits*/
}/*end of for loop for deposits*/
как
do {
printf ("\nEnter the number of deposits (0-5):");
scanf ("%i", &deposits);
if (deposits < 0 || deposits > 5) {
printf ("*** Invalid number of deposits, please re-enter.");
} else {
break;
}
} while (1);
То же самое можно сделать для других циклов.
Идея состоит в том, чтобы запросить ввод как минимум один раз и проверить, является ли введенное значение допустимым для вашего случая, если нет, запросите ввод еще раз.
ответ Дунканвилкокса правильный, но он не учел ту часть, где вы меняете привязку слоя вида на точку, которую хотите повернуть.
CGSize sz = theview.bounds.size;
// Anchorpoint coords are between 0.0 and 1.0
theview.layer.anchorPoint = CGPointMake(rotPoint.x/sz.width, rotPoint.y/sz.height);
[UIView beginAnimations:@"rotate" context:nil];
theview.transform = CGAffineTransformMakeRotation( 45. / 180. * M_PI );
[UIView commitAnimations];
Это задокументировано здесь: http://developer.apple.com/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html
Если Вы не хотите, чтобы анимация произошла, но просто установила новое вращение, можно использовать это:
CGFloat newRotation = 3.14f
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.0]; // no tweening
CGAffineTransform transform = CGAffineTransformMakeRotation(newRotation);
self.transform = transform;
[UIView commitAnimations];
Вращение должно действительно произойти вокруг центра UIView. При установке animationDuration для обнуления гарантий не должно происходить никакой вставки промежуточных кадров.
Убедитесь, хотя Вы не делаете этого 60 раз в секунду. Очень заманчиво создать игру как анимации с этими инструментами. Подобные анимации точно не предназначены, чтобы кадр структурировал базирующийся, "много спрайтов, летящих везде" игра.
Для этого - и я снизился на ту дорогу - единственный способ пойти, OpenGL.
Вращение происходит вокруг точки привязки слоя представления. Значение по умолчанию для точки привязки является центром (0.5, 0.5), таким образом, одно только вращение без переводов должно быть достаточным.
Сделал быстрый тест, и это работает на меня:
[UIView beginAnimations:@"rotate" context:nil];
self.transform = CGAffineTransformMakeRotation( 45. / 180. * 3.14 );
[UIView commitAnimations];