Анимация ядра UIview - вращение и setFrame одновременно - PullRequest
1 голос
/ 30 марта 2011

Hy,

В моем приложении я хочу анимировать UIView, изменяя его положение и вращение одновременно. Проблема в том, что иногда анимация меняет ширину и высоту UIView.

Анимационный код:

int shuffleFrameX = (int)self.gameView.frame.size.width - (int)myView.frame.size.width;
int shuffleFrameY = (int)self.gameView.frame.size.height - (int)myView.frame.size.height;

int x = arc4random()%shuffleFrameX;
int y = arc4random()%shuffleFrameY;

CGRect newFrame = CGRectMake(x, y, myView.frame.size.width, myView.frame.size.height);

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];

if(isPieceRotationActive)
{
    int fact = arc4random()%4;
    myView.transform = CGAffineTransformMakeRotation(DegreesToRadians(90*fact));
    [myView setPieceRotation:fact];
}

[myView setFrame:newFrame];
[UIView commitAnimations];

Эта анимация повторяется от 2 до 5 раз с использованием функций делегата. Я не скопировал их здесь.

Есть идеи, что я делаю не так?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Изменить / Адаптировать ваш код для использования этой последовательности:

  • Установить вид в исходное положение (0 градусов)
  • установить новый кадр
  • поверните до желаемой степени.

Примерно так:

  • myView.transform = CGAffineTransformMakeRotation (DegreesToRadians (0));
  • [myView setFrame: newFrame];
  • myView.transform = CGAffineTransformMakeRotation (DegreesToRadians (90 * fact));

Удачи!

2 голосов
/ 31 марта 2011

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

...