2015-05-21 26 views
2

我在Yosemita 10.10上編寫了Eclipse(而不是Xcode)... 我嘗試捕獲MouseMoved事件,但它沒有調用(mouseDown,mouseDragged - 工作正常)。所以我使用這個示例代碼從這裏 http://lists.apple.com/archives/mac-opengl/2003/Feb/msg00069.html 但compiller顯示錯誤
[app setDelegate:view]; ( - 無法使用類型'NSView *'的左值初始化'id'類型的參數)
如果我評論此行 - 它是工作,但mouseMoved不會調用。
請幫忙!我是新手在Objective-C可可NSOpenGLView - [win setDelegate:view]顯示錯誤。如何手動委派?

回答

0

OS X不會自動跟蹤您的鼠標移動事件,除非您請求它們。

爲了接收mouseMoved:事件,您應該將NSTrackingArea添加到您的子類NSOpenGLView。例如:

- (void)awakeFromNib { 
    NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:self.frame options:NSTrackingActiveAlways|NSTrackingMouseMoved owner:self userInfo:nil]; 
    [self addTrackingArea:trackingArea]; 
} 

之後,您的mouseMoved:方法將被調用。

- (void)mouseMoved:(NSEvent *)theEvent { 
    NSLog(@"moved"); 
} 

您可以選擇實現updateTrackingAreas如果您需要手動更新您的跟蹤區域時,視圖調整大小。詳情請參考Using Tracking-Area Objects

+0

非常感謝!awakeFromNib並沒有給我打電話,但是我把這段代碼放到了viewDidMoveToWindow中,它現在工作的很好!
但keyDown事件仍然不起作用。
我加了:
[win setInitialFirstResponder:view];
\t \t [win setNextResponder:view];
\t \t [win makeFirstResponder:view]; (BOOL)acceptedFirstResponder { return YES; // never called }
並且沒有任何作用...也許我必須創建NSController對象的子類?(在哪種情況下,我該如何將這個子類連接到我的NSView對象? ) – user3226859

+0

當您按下鍵盤鍵時,'keyDown:'在第一個響應者上被調用。所以確保你的'keyDown:'方法在正確的位置實現。通常你也不需要操縱第一響應者,因爲系統會根據用戶交互自動設置它。 –

+0

這是我的代碼:http://stackoverflow.com/questions/30398605/cocoa-keydown-event-doesnt-call也許這是行不通的,因爲視圖沒有委託與勝利? – user3226859