UIview核心动画 - 同时旋转和设置框架

时间:2011-03-29 23:52:23

标签: iphone animation uiview frame cgaffinetransform

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 个答案:

答案 0 :(得分:2)

我认为你应该使用边界而不是框架。当在矩形上进行旋转以保持旋转的矩形时,框架的尺寸将增大,边界将不会,因为边界代表旋转的矩形的内部坐标

答案 1 :(得分:2)

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

  • 将视图放在原始位置(0度)
  • 设置新框架
  • 旋转到所需程度。

这样的事情:

  • myView.transform = CGAffineTransformMakeRotation(DegreesToRadians(0));
  • [myView setFrame:newFrame];
  • myView.transform = CGAffineTransformMakeRotation(DegreesToRadians(90 * fact));
祝你好运!