Перетащите окно с NSImage в качестве ручки? - PullRequest
1 голос
/ 22 января 2012

Я пишу приложение для Mac и использовал этот код, чтобы скрыть дескриптор окна,

[self.window setStyleMask:NSBorderlessWindowMask];

Ну, это здорово, но мне все еще нужна ручка для перемещения по окну, так есть ли способ перемещаться по окну от другого объекта, такого как NSImage, действующего как дескриптор окна?

Код моего изображения в формате .h,

@interface WOWAppDelegate : NSObject <NSApplicationDelegate> {
        NSWindow *window;
    IBOutlet NSImageView* winView;

}

и в файле .m

- (void)awakeFromNib {

    NSString *inFilePathwin = [[[NSBundle mainBundle] resourcePath]  stringByAppendingPathComponent:@"win.png"];
    NSImage *winImage = [[[NSImage alloc] initWithContentsOfFile:inFilePathwin] autorelease];
    [winView setImage:winImage];

} 

Итак, изображение работает и показывает, как мне связать эту функцию?

1 Ответ

4 голосов
/ 22 января 2012

Перехватите событие mouseDragged в NSView-подпредставлении.

-(void)mouseDragged:(NSEvent *)theEvent
{       
CGFloat deltax = [theEvent deltaX];
CGFloat deltay = [theEvent deltaY];

NSRect frame = [[self window] frame];
frame.origin.x += deltax;
frame.origin.y -= deltay;

[[self window] setFrameOrigin:frame.origin];    
}

Итак

  1. подкласс NSView as XView
  2. поместите изображение дескриптора в экземпляр этого контейнера вида.
  3. Поместите контейнер, где вы хотите, в главном окне Windows.
  4. Используйте этот фрагмент в XView, чтобы перетащить окно вокруг.
  5. Отрегулируйте поведение с помощью событий mouseDown и MouseUp.
...