2010-04-17 84 views
2

我有这样的看法,我在我的代码一些其他的点使用类似如何动画同时旋转和缩放视图?

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度(!!!! ?????)

这是一些错误还是我错过了某些东西? 谢谢。

回答

3

与KennyTM讨论后,我到达了最佳的解决方案,同时具有绝对的转变......变焦方法

,我做的:

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

当我旋转视图时,我存储viewAngle。

2

因为.transform赋值并不意味着新的将连接到旧的。在新的变换中,只能指定200%缩放,但不能旋转,因此视图将返回到0 °。

试试这个:

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

谢谢,但这解决了旋转问题,但造成了规模问题。问题是这样的:我有4个放大因子用于这个视图,比如0.66,1.0,1.5和2.0。这些是绝对值。如果我使用你的解决方案,将不可能返回到每个缩放因子.... – SpaceDog 2010-04-17 16:30:05

+0

@Mike:为什么你不能使用独立的伊娃来存储缩放因子? – kennytm 2010-04-17 16:32:50

+0

我的意思是这个:假设缩放因子是1.然后我使用你的解决方案,并去0.66。现在我想去2.使用绝对尺度,我只是把zoomFactor设置为2,但现在缩放系数必须是3.03。现在回到0.66,我将不得不使它0.21。经过无数的变革,我现在不知道缩放系数是什么。我将不得不保留所有应用转换的历史记录以了解当前的缩放因子,只需查看ivar ....无法将转换应用到视图并使其永久保存?我的意思是,更新转换矩阵? – SpaceDog 2010-04-17 16:38:36