0

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

我想我必须在屏幕左侧创建视图,然后使用 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,我预计会将其移动到屏幕中间某处。相反,它会在我想要的 0 处使用它的新 origin.x 直接滑入。

顺便说一句,CGAffineTransformIdentity 非常适合将视图从屏幕上滑出。

谁可以给我解释一下这个。文档似乎说了些不同的话。

谢谢,

约翰

4

2 回答 2

1

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

如果您正在创建对象并在将其添加到它的父视图之前调用 CGAffineTransformTranslate,那么当您将其添加到它的父视图时,它将显示在允许它移动到其定义的位置的位置,即 CGAffineTransformTranslate 调用中定义的数量和方向。

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

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

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

于 2011-09-20T04:31:39.403 回答
0

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

于 2014-03-19T13:11:15.350 回答