【问题标题】:UIImageView layer orderUIImageView 图层顺序
【发布时间】:2012-01-26 17:04:54
【问题描述】:

我无法理解 Xcode 中的分层是如何执行的。我有一个带有视图的 .xib,该视图有 6 个 UIImageView ,每个都包含不同的图像。我为其中的每一个都创建了IBOutlets,因此我可以在运行时更改图像。

我现在想更改 UIImageView 在运行时的绘制顺序,因此后面的 imageA 现在被绘制在其他所有内容之上。如何更改图层顺序?我最初尝试删除所有子视图并使用[self.view insertSubview: atIndex: ] 来查看是否可以这样更改绘制顺序,但我的代码崩溃了。

谁能告诉我这样做的正确方法吗?

提前致谢, 艾略特

【问题讨论】:

    标签: iphone xcode uiimageview uiimage layer


    【解决方案1】:

    我猜你正在寻找这些 UIView 方法:

    1: exchangeSubviewAtIndex:withSubviewAtIndex: 交换指定索引处的子视图。

    - (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2
    

    2: 将SubviewToFront: 移动指定的子视图,使其出现在其兄弟视图之上。

    - (void)bringSubviewToFront:(UIView *)view
    

    3: 发送子视图返回: 移动指定的子视图,使其出现在其兄弟视图的后面。

    - (void)sendSubviewToBack:(UIView *)view
    

    使用这些方法,您可以交换子视图的顺序,以使一个 UIView 在其父视图中显示在另一个之上...如果这就是您要问的......

    【讨论】:

    • 非常感谢!明天我会看看这些方法,因为它们看起来像我正在寻找的。​​span>
    • 不错。我从不寻找带来/发送对。认为我必须手动完成。
    【解决方案2】:

    崩溃可能是因为当您从其父图像中删除图像时,其保留计数变为零并被释放。

    如果您只想交换两个视图,请参阅 - (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2 on UIView。如果你想做一个更复杂的交换,你可以删除和读取,只要确保你保留你删除的视图(尽管有 ARC)。

    【讨论】:

    • 是的,我感觉你是对的,这会导致崩溃,我会尝试使用交换方法,因为它应该可以满足我的需要。
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多