【问题标题】:In Cocoa, what is the best way to change the cursor when hovering over a circular view?在 Cocoa 中,将鼠标悬停在圆形视图上时更改光标的最佳方法是什么?
【发布时间】:2009-07-23 04:40:27
【问题描述】:

我想做的事

我有一个圆形的自定义 NSView 子类,当鼠标悬停在视图的圆形部分上时,我想更改光标的外观,但不是在视图的矩形部分落在圆圈之外时更改光标的外观。

Here's an illustration。我会用图像标签内联它,但我太新了,无法参与这些很棒的功能。

到目前为止我所知道的

我知道如何通过 NSCursor 改变光标的外观。我认为为矩形视图完成此操作的最佳方法是使用光标矩形。我知道我可以接收 mouseMoved 事件(并且应该在鼠标不在此视图上方时使用 mouseEntered 和 mouseExited 将其关闭),并且有一种简单、廉价的方法来确定某个点是否位于感兴趣的区域中。

那么问题出在哪里?

据我所知,系统不会将 mouseMoved 事件发送到不是第一响应者的视图。因此,如果我想在鼠标悬停在我的视图上时获取 mouseMoved 事件,我需要从当前拥有它的人那里窃取 firstResponder 状态。如果文本视图具有焦点,只需将鼠标移动到此类视图上就会将其偷走,从可用性的角度来看这是不可接受的。

因此,我的问题归结为:有没有更好的方法来做到这一点?我可以在不作为第一响应者的情况下获取 mouseMoved 事件吗?

谢谢!

我会添加以下标签:custom-views mouse-events NSCursor firstResponder 但同样,我是 SA 菜鸟,所以我不能。

【问题讨论】:

    标签: cocoa mouse nsview


    【解决方案1】:

    我认为您可能只需要覆盖 NSView 中的acceptsFirstResponder 方法即可返回YES。如果您不这样做,则视图将不会收到任何事件信息。

    【讨论】:

    • 确实如此。谢谢!
    【解决方案2】:

    它必须是圆形区域吗?如果可以接受视图矩形范围内的任何位置,则可以使用cursor rect

    【讨论】:

    • 遗憾的是,该地区的圆形性质是不可协商的。令人高兴的是,使用 mouseMoved 事件来执行命中检测(并在不需要时使用 mouseEntered 和 mouseExited 方法关闭它们)效果很好。
    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 2021-11-27
    • 2012-02-09
    • 1970-01-01
    • 2011-06-09
    • 2022-01-26
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多