2010-12-21 2 views
1

Пожалуйста, имейте в виду, что я действительно новичок Разработчик какаоКак создать OSD-подобное окно с Cocoa на Mac OSX?

Сценарий: У меня есть поиск, когда доходит до конца документа, начиная с начала, так называемого «обертывания».

Когда я делаю обертку, я хочу показать окно, которое мигает на экране в течение некоторого времени (одна секунда?) И окна управления OSD (On Screen Display), TextWrangler и XCode делают это, когда текстовый поиск перезапускается с начать.

Как я могу реализовать подобное окно?

+1

На самом деле, я думаю, что XCode просто использует представление, но TextWrangler и BBEdit используют окно. – ughoavgfhw

ответ

3

Внедрение представления для этого было бы относительно простым. Следующий код в подклассе NSView отображает частично прозрачный закругленный прямоугольник, который игнорирует события при размещении в окне.

- (void)drawRect:(NSRect)dirtyRect { 
    [[NSColor colorWithDeviceWhite:0 alpha:.7] set]; 
    [[NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:10 yRadius:10] fill]; 
    //Additional drawing 
} 
- (NSView *)hitTest:(NSPoint)aPoint { 
    return nil; 
} 
- (BOOL)acceptsFirstResponder { 
    return NO; 
} 
- (BOOL)isOpaque { 
    return NO; 
} 

Если вы хотите сделать это в окне, вам нужно будет создать без полей, без непрозрачного окна и установить это, как вид контента. Кроме того, вам нужно будет, чтобы представление заполнило его границы четким цветом в начале метода drawRect :.

//Create and display window 
NSPanel *panel = [[NSPanel alloc] initWithFrame:NSMakeRect(0,0,300,200) styleMask:NSBorderlessWindowMask|NSNonactivatingPanelMask backing:NSBackingStoreBuffered defer:YES]; 
[panel setOpaque:NO]; 
MyViewSubview *view = [MyViewSubview new]; 
[panel setContentView:view]; 
[view release]; 
[p setLevel:NSScreenSaverWindowLevel]; 
[p orderFront:nil]; 

//Add these two lines to the beginning of the drawRect: method 
[[NSColor clearColor set]; 
NSRectFill(self.bounds); 

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

Чтобы убрать изображение, зарегистрируйтесь NSViewAnimation или используйте объект NSTimer и сделайте это вручную.

Смежные вопросы