【问题标题】:How to add a subview "behind" other elements?如何在其他元素“后面”添加子视图?
【发布时间】:2014-05-06 10:59:46
【问题描述】:

在我的一个 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 放在其上方?

【问题讨论】:

    标签: ios objective-c uiimageview subview


    【解决方案1】:

    你可以使用:

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

    代替addSubView,或者使用sendSubviewToBack:

    【讨论】:

    • 成功了!非常感谢。 :) 为了完整性:我使用UILabel *label = (UILabel *)[self.view viewWithTag:2]; 检索了标签,然后使用[self.view insertSubview:self.arrowImage belowSubview:label]; 添加了我的UIImageView。谢谢!
    【解决方案2】:

    我想你正在寻找

    [topViewAndBottomViewParentView insertSubview:topView aboveSubview:bottomView]
    
    [topViewAndBottomViewParentView insertSubview:bottomView belowSubview:topView]
    

    【讨论】:

      【解决方案3】:

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

      但是,当您旋转它时,它的后续子视图可能也会旋转。 (取决于你如何旋转它)。

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

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

      【讨论】:

      • 谢谢赫尔曼。 insertSubview:belowSubview: 成功了。但是,旋转我的子视图不会旋转其上方或下方的任何其他子视图。谢谢!
      猜你喜欢
      • 2012-04-05
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      相关资源
      最近更新 更多