在我的应用程序中,我尝试将 subview 放在最前面,然后再将其放回其原始图层位置。代码应该非常简单:
要将 subview 置于最前面(在我的自定义UIView类内部):
[self.superview bringSubviewToFront:self];
简单。我将原始z位置存储在一个名为
zPosition
的实例变量中。因此,-bringSubviewToFront:
之前的行是:zPosition = [self.superview.subviews indexOfObject:self];
因此,我用来将 subview 置于最前面的所有代码是:
zPosition = [self.superview.subviews indexOfObject:self];
[self.superview bringSubviewToFront:self];
这可以正常工作。问题是当我尝试将 subview 放回原处时。我只是在这样做:
[self.superview exchangeSubviewAtIndex:zPosition withSubviewAtIndex:
[self.superview.subviews indexOfObject:self]];
使用此代码,如果我有两个 subview ,则会发生以下情况:
假设我有 View A和 View B。 View A在 View B上方。我点击 View B,它位于前面。我再次点击 View B(应该回到原来的位置),什么也没有发生,所以它现在在 View A上。如果现在点击 View A,它会出现在最前面,但是当我再次点击它时(因此应该返回其原始的z位置:在 View B)下,其所有同级 View 都消失了!
有人看到造成这个问题的原因吗?
最佳答案
exchangeSubviewAtIndex可能会将 View 放回正确的位置,但它也会在顶部交换另一个 View ,而这并不是您开始的。您可能需要执行以下操作,而不是exchangeSubviewAtIndex:
[self retain];
UIView *superview = self.superview;
[self removeFromSuperview];
[superview insertSubview:self atIndex:zPosition];
[self release];