如何在其他元素后面添加子视图?

时间:2014-05-06 10:59:46

标签: ios objective-c uiimageview subview

在我的一个ViewControllers中,我使用此方法旋转UIImageView

    UIImageView *tmp = (UIImageView *)[self.view viewWithTag:1];
    if(tmp)
        [tmp removeFromSuperview];

    // Create new label and add it back (with proper rotation)
    self.arrowImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 157, 320, 320)];   
    self.arrowImage.image = [UIImage imageNamed:@"image"];
    self.arrowImage.tag = 1; // Add back with same tag
    [self.view addSubview:self.arrowImage];
    self.arrowImage.transform = CGAffineTransformMakeRotation( ... );

显然,需要移除并添加子视图(即UIImageView)以使其围绕其中心旋转。至少这是我能让它发挥作用的唯一方式。其他/更好的方式将非常感激。

但是,我的问题是:如何将UIImageView添加为子视图,以便隐藏在之后,比如我放在它上面的UILabel在我的故事板中?

3 个答案:

答案 0 :(得分:9)

您可以使用:

– insertSubview:aboveSubview:
– insertSubview:belowSubview:
– insertSubview:atIndex:

取代addSubView,或使用sendSubviewToBack

答案 1 :(得分:1)

我认为你在寻找

[topViewAndBottomViewParentView insertSubview:topView aboveSubview:bottomView]

[topViewAndBottomViewParentView insertSubview:bottomView belowSubview:topView]

答案 2 :(得分:1)

使用insertSubview:aboveSubview:insertSubview:belowSubview:insertSubview:atIndex:将子视图添加到给定点的子视图层次结构当然是一个很好的开始点。

然而,当你旋转它时,它的后续子视图也会自动旋转。 (取决于你如何旋转它)。

我建议考虑一种不同的方法。 1.将所有子视图(作为子视图的堆栈)添加到self.view(或任何常见的超级视图),它们应该显示在您要旋转的一个视图下方。 2.将要旋转的视图添加到公共超级视图(self.view) 3.将视图(或视图堆栈)添加到公共超级视图中。

通过这样做,三个视图堆栈(意味着视图加上它的子视图加上它的子视图......)是兄弟姐妹作为self.view的子视图。但他们重叠。添加它们的顺序将关注首先添加的视图在旋转视图下可见,添加为第三视图的视图在顶部可见,但中间的视图应该能够旋转而不会影响其他视图。