Я могу переместить источник, когда выполнение вращения преобразовывает в Кварц, 2D для iPhone?

Кажется, у вас есть какая-то ошибка в логике вашей программы. Я бы переписал

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);

То же самое можно сделать для других циклов.

Идея состоит в том, чтобы запросить ввод как минимум один раз и проверить, является ли введенное значение допустимым для вашего случая, если нет, запросите ввод еще раз.

8
задан Skyler 22 March 2009 в 23:30
поделиться

3 ответа

ответ Дунканвилкокса правильный, но он не учел ту часть, где вы меняете привязку слоя вида на точку, которую хотите повернуть.

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

14
ответ дан 5 December 2019 в 06:54
поделиться

Если Вы не хотите, чтобы анимация произошла, но просто установила новое вращение, можно использовать это:

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.

1
ответ дан 5 December 2019 в 06:54
поделиться

Вращение происходит вокруг точки привязки слоя представления. Значение по умолчанию для точки привязки является центром (0.5, 0.5), таким образом, одно только вращение без переводов должно быть достаточным.

Сделал быстрый тест, и это работает на меня:

[UIView beginAnimations:@"rotate" context:nil];
self.transform = CGAffineTransformMakeRotation( 45. / 180. * 3.14 );
[UIView commitAnimations];
2
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: