我正在创建一个视图并让它从左到右移动到屏幕上。我很难按照我想要的方式工作,但是当我这样做时,我对它的工作方式感到困惑。
我以为我必须在屏幕左侧创建视图,然后使用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可以很好地将视图从屏幕上滑回屏幕。
有人可以向我解释一下。文档似乎说了不同的东西。
谢谢,
约翰
答案 0 :(得分:1)
我想我现在明白了。我认为这取决于你何时执行CGAffineTransformTranslate。
如果你正在创建对象并在将它添加到它的超级视图之前调用CGAffineTransformTranslate,当你将它添加到它的超级视图时,它将显示在一个位置,该位置将允许它移动到它定义的位置中定义的数量和方向。 CGAffineTransformTranslate call。
另一方面,如果您要移动的对象已经显示,则该对象将从其当前位置移动到新位置。
在我创建新UIView并希望它从屏幕左侧滑入的情况下,如果我在创建和添加视图的同时调用CGAffineTransformTranslate,我将不得不定义视图框架在屏幕上的最终位置。
或者,可以在计时器方法中调用CGAffineTransformTranslate。在这种情况下,您可以在屏幕上定义视图的帧,将其添加到显示器并创建计时器。然后,计时器方法将使用CGAffineTransformTranslate在屏幕上移动它。
答案 1 :(得分:0)
我认为你可以为viewControllers -view的frame属性( - animateWithDuration:animations :)设置动画,而不是使用更容易使用和理解的变换。