如何为视图的同步旋转和缩放设置动画?

时间:2010-04-17 16:09:39

标签: iphone core-animation ipad

我有这个观点,我使用像

之类的东西做一些旋转变换
myView.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
//The view was originally at 0 degrees.

在我的代码的其他方面,我想缩放视图动画,所以我做

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
myViews.transform = CGAffineTransformMakeScale(2.0f, 2.0f);
[UIView commitAnimations];

但是当我这样做时,动画是在视图为0度时执行的,忽略了之前的转换。它只是假设视图尚未处于零度,因此,此动画缩放视图并将其旋转回0度(!!!! ?????)

这是一些错误还是我错过了什么? 感谢。

2 个答案:

答案 0 :(得分:3)

在与KennyTM讨论后,我找到了绝对转换的最佳解决方案......

在缩放方法上,我这样做:

// notice that both transformations are absolute
CGAffineTransform rotation = CGAffineTransformMakeRotation(degreesToRadian(viewAngle));
CGAffineTransform zoom = CGAffineTransformMakeScale(zoomFactor, zoomFactor);
myView.transform = CGAffineTransformConcat(rotation, zoom);

旋转视图时存储viewAngle。

答案 1 :(得分:2)

因为.transform分配并不意味着新分配将与旧分配连接。在新的变换中,您只指定了200%的缩放比例,但没有旋转,因此视图将返回0°。

请改为尝试:

myViews.transform = CGAffineTransformScale(myViews.transform, 2.0f, 2.0f);