Версия OS X для восстановления SubviewToFront:? - PullRequest
8 голосов
/ 21 ноября 2010

Мне нужно повторить функцию takeSubviewToFront: на iPhone, но я программирую на Mac.Как это можно сделать?

Ответы [ 6 ]

7 голосов
/ 21 ноября 2010

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

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

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

6 голосов
/ 08 февраля 2013

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

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 голосов
/ 03 декабря 2017

Это решение Swift 3.0:

extension NSView {
    public func bringToFront() {
        let superlayer = self.layer?.superlayer
        self.layer?.removeFromSuperlayer()
        superlayer?.addSublayer(self.layer!)
    }
}
0 голосов
/ 14 апреля 2012

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

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

-(void)bringSubviewToFront:(NSView*)view
{
    [view retain];
    [view removeFromSuperview];  
    [self addSubview:view];  
    [view release];
}
0 голосов
/ 30 декабря 2010

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

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

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

0 голосов
/ 21 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...