【问题标题】:Move a UIView's superview by setting its center property通过设置其中心属性来移动 UIView 的超级视图
【发布时间】:2012-08-18 16:12:44
【问题描述】:

我有一个很奇怪的问题。我试图在viewDidAppear 中手动旋转和移动 UIView 的超级视图,如下所示:

- (void)viewWillAppear:(BOOL)animated
{
    // ...

    [self.view.superview setTransform:CGAffineTransformMakeRotation(M_PI/2)];
    [self.view.superview setCenter:CGPointMake(100, 200)]; // (100, 200) is toy value

    // ...
}

由于某种原因,旋转被正确应用,但超级视图的中心(即位置)根本没有移动。我还尝试将转换设置为 CGAffineTransform,这是旋转 + 平移(或仅是平移)的组合,并且也不会移动超级视图。

如果有影响,self.view.superview 是最顶层的视图(即self.view.superview.superviewnil)。

我在这里遗漏了一些非常简单的东西吗?

编辑:nielsbot 的评论是正确的,因为将其放入 viewDidLoad 是有效的,但到那时,视图已经出现,因此它会在捕捉到新位置的位置闪烁。有没有解决的办法?

【问题讨论】:

  • viewDidAppear 中试试——你的代码是viewWillAppear。一些布局代码可能会在出现之后运行并撤消您的更改。
  • 首先,通过“正确应用旋转但根本没有移动超级视图”来明确你想说什么??
  • @nielsbot 这行得通,但是有一个闪烁,因为它首先显示视图,然后将其移动到那里。有没有办法避免这种情况?

标签: ios uiview positioning cgaffinetransform


【解决方案1】:

尝试设置视图的边界:

[self.view.superview setBounds:CGRectMake(x,y,self.view.superview.width,self.view.superview.height)];

这应该将您的视图移动到您给他的 x,y 位置 但这当然不是中心

中心只是代表一个特殊的点,例如用于旋转

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多