eri*_*ell 10 layer uiview ios subviews
在我的应用程序中,我正在尝试将子视图添加到前面,然后将其放回到其原始图层位置.代码应该非常简单:
要将子视图放在前面(在我的自定义UIView类中):
[self.superview bringSubviewToFront:self];
Run Code Online (Sandbox Code Playgroud)
简单.我将原始z位置存储在一个名为的实例变量中,你猜对了zPosition.所以,前面的行-bringSubviewToFront:是:
zPosition = [self.superview.subviews indexOfObject:self];
Run Code Online (Sandbox Code Playgroud)
所以,我用来将子视图放在前面的所有代码都是:
zPosition = [self.superview.subviews indexOfObject:self];
[self.superview bringSubviewToFront:self];
Run Code Online (Sandbox Code Playgroud)
这应该是正常的.问题是当我尝试将子视图放回原位时.我只是这样做:
[self.superview exchangeSubviewAtIndex:zPosition withSubviewAtIndex:
[self.superview.subviews indexOfObject:self]];
Run Code Online (Sandbox Code Playgroud)
使用此代码,如果我有两个子视图,则会发生以下情况:
假设我有视图A和视图B.视图A在视图B上方.我点击视图B,它来到前面.我再次点击视图B(它应该回到原来的位置),没有任何反应,所以它现在在视图A上.如果我现在点击视图A,它会到达前面,但是当我再次点击它时(所以它应该回到原来的z位置:在视图B)下面,它的所有兄弟视图都消失了!
有谁看到可能导致这个问题的原因?
AW1*_*101 11
exchangeSubviewAtIndex可能会将视图放回正确的位置,但它也会在顶部交换另一个视图,这不是您开始使用的视图.您可能需要执行类似这样的操作而不是exchangeSubviewAtIndex:
[self retain];
UIView *superview = self.superview;
[self removeFromSuperview];
[superview insertSubview:self atIndex:zPosition];
[self release];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15183 次 |
| 最近记录: |