1

嗨,

我的应用程序我想通过同时更改它的位置和旋转来为 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 次。我没有在这里复制它们。

知道我在做什么错吗?

谢谢!

4

2 回答 2

2

我认为你应该使用边界而不是框架。当对矩形进行旋转以保持旋转的矩形时,框架的大小将增加,但边界不会因为边界表示旋转矩形的内部坐标

于 2011-03-30T22:40:03.207 回答
2

更改/调整您的代码以使用此序列:

  • 将视图置于原始位置(0 度)
  • 设置新框架
  • 旋转到所需的度数。

像这样的东西:

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

祝你好运!

于 2011-11-20T02:51:34.853 回答