首页 > 解决方案 > 如何处理 mouseEntered:带有圆角的 NSView 上的事件

问题描述

我正在创建一个具有圆角的视图,并且我希望当鼠标悬停在视图上时该视图突出显示。问题是当鼠标在角落之外时NSTrackingArea注册一个事件。mouseEntered:有没有办法覆盖它如何确定它是否在视图中?

我试过了:

如有必要,我可以实现mouseEntered:忽略其点不在矩形内的所有事件,但我想知道是否有更优雅的方式(即mouseEntered:只有当鼠标实际进入视图时才调用哪里)。

这是我用于绘图的代码(它适用于我):

...

override func draw(_ dirtyRect: NSRect)
{
    let path = NSBezierPath(roundedRect: dirtyRect, xRadius: radius, yRadius: radius)
    path.addClip()

    backgroundColor.setFill()
    dirtyRect.fill()
}

...

override func mouseEntered(with event: NSEvent) 
{
    print("Mouse entered!")
}

让我知道我是否可以澄清任何事情。谢谢您的帮助!

标签: swiftxcodecocoansview

解决方案


您可以保存路径并event使用 . 检查点是否在内部containsPoint(point: CGPoint)。有关更多信息,请参见此处


推荐阅读