2009-07-23 41 views
3

我想做在Cocoa中,將鼠標懸停在圓形視圖上時更改光標的最佳方法是什麼?

我有一個圓形的自定義的NSView子類,我想改變,當鼠標懸停在視圖的圓形部分的光標的外觀,但在部分時,沒有什麼視圖的矩形落在圓外。

Here's an illustration。我會用一個圖像標籤將其內聯,但我太新了,無法分享這些超棒的功能。

我知道什麼到目前爲止

我知道如何改變光標通過NSCursor外觀。我認爲完成矩形視圖的最佳方法是使用遊標矩形。我知道我可以接收mouseMoved事件(當鼠標不在這個視圖上時,應該使用mouseEntered和mouseExited來關閉它們),並且有一個簡單而廉價的方法來確定一個點是否位於感興趣的區域。

那麼問題是什麼呢?

據我所知,系統不會將mouseMoved事件發送給不是第一響應者的視圖。因此,如果我想在鼠標懸停在我的視圖上時獲取mouseMoved事件,我需要從當前擁有它的人中竊取firstResponder狀態。如果文本視圖具有焦點,那麼只需將鼠標移動到這樣的視圖上就會將其偷走,這從可用性角度來看簡直是不可接受的。

因此,我的問題歸結爲:有沒有更好的方法來做到這一點?我可以在沒有成爲第一響應者的情況下獲得mouseMoved事件嗎?

謝謝!

我會添加下面的標籤:custom-views mouse-events NSCursor firstResponder 但是,我是一個SA noob,所以我不能。

回答

2

我想你可能只需要重寫NSView中的accepFirstResponder方法來返回YES。如果你不這樣做,那麼視圖將不會收到任何事件信息。

+0

確實如此。謝謝! – 2009-07-23 05:19:47

1

它是否必須是圓形區域?如果視圖的矩形範圍內的任何位置都可以接受,則可以使用cursor rect

+0

不幸的是,該地區的循環性是不可談判的。令人高興的是,使用mouseMoved事件來執行命中檢測(當mouseEntered和mouseExited方法不需要時將其關閉)工作得很好。 – 2009-07-23 17:18:20

相關問題