我敢肯定,這只是一個簡單的答案,我只是沒有看到(與可可這些API很大的API的禍害)。我正在使用Apple的Sketch示例版本(我認爲這是原版,之前他們添加了可訪問性內容,並基於KVO製作了整個內容)。我正在使用'kiss'版本,這個版本漂浮在那裏,增加了Bezier和多邊形工具,試圖獲得它,所以如果您在創建工具面板時點擊工具面板,Bezier點跟蹤循環會折騰結束路徑。處理跟蹤列表中的點的相關行是這樣的:可可 - 只有特定窗口的鼠標事件? KeyDown事件?
// SKTGraphicView* view
// Tracking loop
while (1) {
event = [[view window] nextEventMatchingMask:
(NSLeftMouseDownMask | NSLeftMouseDraggedMask | NSLeftMouseUpMask)];
point = [view convertPoint:[event locationInWindow] fromView:nil];
如何判斷此點是否在文檔窗口內?我試過
BOOL insideView = [view mouse:point inRect:[view bounds]];
只要它跟蹤MouseDragged事件就會工作,但如果在工具選項板窗口中單擊將失敗。從locationInWindow出來的座標,看起來像是我單擊一個單獨的窗口,它將吐出相對於封閉窗口原點的點 - 無論那個窗口是什麼。我如何讓它從任何'屏幕座標是'([事件locationOnScreen]?)轉換,然後轉換到特定視圖的座標系?
我可以使用([view window] == [event window]) - 但對於初始點擊在窗口內的MouseDragged事件,這似乎沒有改變(但我可以在那裏檢查邊界矩形) 。但是,如果在特定的NSWindow對象上調用nextEventMatchingMask:它似乎應該只返回發生在該窗口中的事件。