用什么来移动UIView self.frame或self.transform属性?

时间:2013-04-23 19:14:15

标签: ios view properties

我对这个问题感到有些困惑。

我知道我可以移动视图更改他们的self.frame.origin,但我发现有一个名为transform的属性,我认为这是为了在屏幕上移动我的视图等。
也许我不明白这一点。

所以我想知道:我必须使用哪个属性来移动UIView(或它的子类)以及另一个属性? 或者,如果我完全错了,请告诉我正确的方法。

4 个答案:

答案 0 :(得分:6)

frame的{​​{1}}属性定义了它相对于它的超级视图的位置。如果你想移动一个视图,那就是你要走的路。

UIView属性基本上将transform应用于视图的后备层。在大多数情况下,如果您只想移动视图,则不希望使用此属性。

CGAffineTransform属性在旋转或缩放图层(即视图)时非常有用。有时,当你应用旋转时,你还需要移动它以使其“保持”它的位置,在这种情况下,你将使用transform属性来移动它。

答案 1 :(得分:5)

添加更多信息

为什么要使用框架。引自View Programming Guide

  

通常,您可以根据需要修改视图的transform属性   实现动画。例如,您可以使用此属性   创建围绕其中心点旋转的视图动画。 您   不会使用此属性对您的视图进行永久性更改,   例如在其超级视图中修改其位置或大小视图   坐标空间。对于这种类型的更改,您应该修改框架   而是视图的矩形

为什么要使用变换。引自Demystifying CGAffineTransform

  

翻译只是说“移动”的一种奇特方式。你可以   当然,通过改变视图的原始值来完成一个动作   frame属性(相对于其superview移动视图),   但是因为我们不能将frame属性与其他属性一起使用   转换,翻译转换很重要。

答案 2 :(得分:4)

您可以通过更新其框架来移动UIView。变换用于旋转和缩放视图。如果要以动画方式移动视图,请尝试使用如下所示的动画块:

    [UIView animateWithDuration:0.3 //Time for the animation
                             animations:^{
                               myView.frame = CGRectMake (0,0,10,20) //Move your frame
                             }
                             completion:^(BOOL finished){
                                //Do stuff when the animation completes
                             }];

答案 3 :(得分:1)

CGrect = rect1 = [view1 frame];

rect1.origin.x = newX;
rect1.origin.y = newY;

您必须在动画中使用setFrame:^{ <here> }

[view1 set enter code here Frame:rect1];