2013-02-18 23 views
1

我有一個的NSView與[self setAcceptsTouchEvents:YES];爲什麼在光標離開框架後NSView繼續接收觸摸事件?

光標離開的NSView框架後,該方法不斷被調用,直到我點擊/開始一個新的姿態,我當它停止並不真正瞭解。

-(void)touchesMovedWithEvent:(NSEvent *)theEvent { 
    [self doStuffs:theEvent]; 
} 

在其他窗口座標系統中表達的座標。

有沒有辦法阻止這種情況,或將座標轉換回視圖座標系?

回答

2

NSResponder的touchesMovedWithEvent被稱爲在您的視圖中開始的觸摸事件,直到它們結束(無論是在您自己的視圖還是其他地方)。

事件位置以窗口座標表示。轉換到您的視圖的座標系統很簡單:

- (void)touchesMovedWithEvent:(NSEvent *)event 
{ 
    NSPoint locInWindow; 
    NSPoint locInView; 

    locInWindow = [event locationInWindow]; 
    locInView = [self convertPoint:locInWindow fromView:nil]; 

    NSLog(@"Location in window: %@", NSStringFromPoint(locInWindow)); 
    NSLog(@"Location in view: %@", NSStringFromPoint(locInView)); 
} 

如果要處理生觸動了自己的多點觸控手勢,這很可能是沒有足夠的信息。您需要使用[event touchesMatchingPhase:NSTouchPhaseMoved inView:self],normalizedPosition,deviceSize等(請參閱Apple's documentation)。

+0

NSEvent是否包含一個指向生成事件的窗口的指針? – alecail 2013-02-19 08:43:43

+0

所有非週期事件都包含一個指向與事件關聯的窗口的指針( - [NSEvent窗口])。如果你想檢查當前事件的位置是否在你的窗口(或視圖)之內或之外,你可以在事件的位置使用NSPointInRect()。 – puzzle 2013-02-19 20:40:34

+0

我其實是指NSView而不是窗口 - 但窗口指針肯定是足夠的。 – alecail 2013-02-20 08:56:35

相關問題