4

我有点困惑这个问题。

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

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

4

4 回答 4

8

a的frame属性UIView定义了它相对于它的父视图的位置。如果你想移动一个视图,那就是要走的路。

transform属性基本上适用CGAffineTransform于视图的支持层。在大多数情况下,如果您只想移动视图,则不想使用此属性。

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

于 2013-04-23T19:34:05.853 回答
6

添加更多信息

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

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

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

翻译只是说“动”的一种花哨的方式。当然,您可以通过更改视图的 frame 属性的原点值(相对于其父视图移动视图)来完成移动,但是由于我们不能将 frame 属性与其他转换一起使用,因此平移转换是一个重要的。

于 2013-11-27T18:25:57.783 回答
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
                             }];
于 2013-04-23T19:32:59.820 回答
1
CGrect = rect1 = [view1 frame];

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

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

[view1 set enter code here Frame:rect1];
于 2013-07-28T11:38:06.540 回答