我需要在iPhone上复制bringSubviewToFront的功能:但是我在Mac上编程。怎么办呢?
答案 0 :(得分:7)
实际上没有尝试过 - 而且可能有更好的方法 - 但这应该有效:
NSView* superview = [view superview];
[view removeFromSuperview];
[superview addSubview:view];
这会将“视图”移动到其兄弟姐妹的前面
答案 1 :(得分:6)
Pete Rossi的回答对我不起作用,因为当用鼠标拖动视图时我需要将视图弹出到前面。但是,沿着相同的路线,下面的工作没有杀死鼠标:
CALayer* superlayer = [[view layer] superlayer];
[[view layer] removeFromSuperlayer];
[superlayer addSublayer:[view layer]];
此外,放在NSView子类或类别中的以下内容非常方便:
- (void) bringToFront {
CALayer* superlayer = [[self layer] superlayer];
[[self layer] removeFromSuperlayer];
[superlayer addSublayer:[self layer]];
}
答案 2 :(得分:0)
重叠的兄弟视图很难在AppKit中正常工作 - 它在很长一段时间内完全不受支持。考虑改为使用CALayers。作为奖励,您可以在iOS版本中重复使用此代码。
答案 3 :(得分:0)
还要确保启用石英渲染图层:
...
NSImageView *anImage = [[NSImageView alloc] initWithFrame:NSRectMake(0,0,512,512)];
[anImageView setWantsLayer:YES];
...
否则,您的图层无法正确呈现。
答案 4 :(得分:0)
Pete Rossi的回答是可行的,但是当你从超级视图中删除时,请记得保留视图。
您可以在NSView上的类别中添加:
-(void)bringSubviewToFront:(NSView*)view
{
[view retain];
[view removeFromSuperview];
[self addSubview:view];
[view release];
}
答案 5 :(得分:0)
这是Swift 3.0解决方案:
extension NSView {
public func bringToFront() {
let superlayer = self.layer?.superlayer
self.layer?.removeFromSuperlayer()
superlayer?.addSublayer(self.layer!)
}
}