2010-11-21 7 views

ответ

6

Не на самом деле попытался это - и может быть лучший способ сделать это - но это должно работать:

NSView* superview = [view superview]; 
[view removeFromSuperview]; 
[superview addSubview:view]; 

Это переместит «вид» на фронт своих братьев и сестер

+0

Возможно, неэффективно, но он выполняет то, что я хотел, поэтому спасибо. – Regan

+0

Возможно, стоит попробовать использовать метод 'setSubviews:'. – ArtOfWarfare

0

Представления Sibling, которые перекрываются, могут быть трудными для работы в AppKit - он был полностью неподдерживаемым в течение длительного времени. Подумайте о том, чтобы сделать их CALayers. В качестве бонуса вы можете повторно использовать этот код в своей версии iOS.

0

также убедитесь, что для того, чтобы слой для кварцевого рендеринга:

... 
NSImageView *anImage = [[NSImageView alloc] initWithFrame:NSRectMake(0,0,512,512)]; 
[anImageView setWantsLayer:YES]; 
... 

в противном случае, ваш слой не может быть правильно оказан.

0

Ответ Pete Rossi работает, но не забудьте сохранить вид, когда вы удалите его из супервизора.

Вы можете добавить это в категории на NSView:

-(void)bringSubviewToFront:(NSView*)view 
{ 
    [view retain]; 
    [view removeFromSuperview]; 
    [self addSubview:view]; 
    [view release]; 
} 
5

ответ Пита Росси не работает для меня, потому что мне нужно, чтобы вытолкнуть вид на фронт при перемещении его с помощью мыши. Однако, по той же схеме следующие делали работу, не убивая мышь:

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]]; 
} 
+0

Отлично! Только то, что мне нужно, спасибо. –

0

Это Swift 3,0 Решение:

extension NSView { 
    public func bringToFront() { 
     let superlayer = self.layer?.superlayer 
     self.layer?.removeFromSuperlayer() 
     superlayer?.addSublayer(self.layer!) 
    } 
} 
Смежные вопросы