2009-07-23 40 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

相关问题