2013-09-01 16 views
0

我在NSImageView上繪製了一個NSBezierPath行。我創建NSBezierPath對象,設置moveToPoint,設置lineToPoint,設置setLineWidth:,然後在我的NSImageView子類的drawRect中調用[myNSBezierPath stroke]。它所有的工作就像我想要的,但我似乎無法使用containsPoint:方法......我試圖實現點擊NSBezierPath

if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{ 
    //do something 
} 

在我NSImageView子類的-(void)mouseUp:(NSEvent*)theEvent但它從來沒有反應,我敢肯定,我打那條線...我做錯了什麼?我只需要檢測是否正在點擊NSBezierPath。

乾杯。

回答

1

確保將鼠標單擊位置轉換爲圖像視圖子類的座標系,而不是放入窗口之一(除非它們相同)。你的bezier路徑不知道它被引入的偏移量,因此在執行命中測試時必須考慮到這一點。

此外,從containsPoint:文檔:

此方法檢查針對路徑本身和它區域包圍 點。在確定封閉區域內的命中時,此方法使用非零卷繞規則(NSNonZeroWindingRule)的 。 不考慮 考慮用於筆畫路徑的線寬。

強調我的。

+0

ImageView與窗口的大小相同(因爲我使用它作爲背景),所以我認爲這不是問題...我應該能夠在mouseEvent hitTest中檢測NSBezierLine嗎?我正在打印所有被點擊的類,我永遠不會獲得NSBezierPath。 – jovanjovanovic