我不明白为什么/如何CGAffineTransformTranslate工作

时间:2011-06-15 01:36:42

标签: iphone xcode ipad cgaffinetransform

我正在创建一个视图并让它从左到右移动到屏幕上。我很难按照我想要的方式工作,但是当我这样做时,我对它的工作方式感到困惑。

我以为我必须在屏幕左侧创建视图,然后使用CGAffineTransformTranslate将其移动到屏幕上。但相反,我在屏幕上创建它,但它仍然很好。我有点困惑。

我在这里创建视图......

profileViewControllerForIPad = [[ProfileViewController alloc] initWithFrame:CGRectMake(0, 0, 512, 446)];

如您所见,原点是0,0。所以在屏幕上,对吧?

这是转型......

[UIView animateWithDuration:0.5 
         animations:^{
            self.view.transform = CGAffineTransformTranslate(CGAffineTransformIdentity,self.view.frame.size.width, 0.0);                             
         }
 ];

正如你所看到的,我将tx值设置为CGAffineTransformTranslate的宽度,我认为这是你希望它从当前位置移动的像素数的值,origin.x为0,我预期会把它移到某个地方的屏幕中间。相反,它会直接滑入它的新origin.x直接在我想要的地方。

BTW CGAffineTransformIdentity可以很好地将视图从屏幕上滑回屏幕。

有人可以向我解释一下。文档似乎说了不同的东西。

谢谢,

约翰

2 个答案:

答案 0 :(得分:1)

我想我现在明白了。我认为这取决于你何时执行CGAffineTransformTranslate。

如果你正在创建对象并在将它添加到它的超级视图之前调用CGAffineTransformTranslate,当你将它添加到它的超级视图时,它将显示在一个位置,该位置将允许它移动到它定义的位置中定义的数量和方向。 CGAffineTransformTranslate call。

另一方面,如果您要移动的对象已经显示,则该对象将从其当前位置移动到新位置。

在我创建新UIView并希望它从屏幕左侧滑入的情况下,如果我在创建和添加视图的同时调用CGAffineTransformTranslate,我将不得不定义视图框架在屏幕上的最终位置。

或者,可以在计时器方法中调用CGAffineTransformTranslate。在这种情况下,您可以在屏幕上定义视图的帧,将其添加到显示器并创建计时器。然后,计时器方法将使用CGAffineTransformTranslate在屏幕上移动它。

答案 1 :(得分:0)

我认为你可以为viewControllers -view的frame属性( - animateWithDuration:animations :)设置动画,而不是使用更容易使用和理解的变换。