我对这个问题感到有些困惑。
我知道我可以移动视图更改他们的self.frame.origin
,但我发现有一个名为transform的属性,我认为这是为了在屏幕上移动我的视图等。
也许我不明白这一点。
所以我想知道:我必须使用哪个属性来移动UIView
(或它的子类)以及另一个属性?
或者,如果我完全错了,请告诉我正确的方法。
答案 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];