首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使透明的NSView子类处理鼠标事件?

要使透明的NSView子类处理鼠标事件,您需要遵循以下步骤:

  1. 创建一个透明的NSView子类。
代码语言:swift
复制
class CustomView: NSView {
    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        setupView()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupView()
    }

    private func setupView() {
        wantsLayer = true
        layer?.backgroundColor = NSColor.clear.cgColor
    }
}
  1. 重写hitTest(_:)方法。
代码语言:swift
复制
override func hitTest(_ point: NSPoint) -> NSView? {
    let hitView = super.hitTest(point)
    return hitView == self ? nil : hitView
}
  1. 添加鼠标事件监听器。
代码语言:swift
复制
override func updateTrackingAreas() {
    super.updateTrackingAreas()

    if let trackingArea = trackingArea {
        removeTrackingArea(trackingArea)
    }

    let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .activeInKeyWindow]
    let trackingArea = NSTrackingArea(rect: bounds, options: options, owner: self, userInfo: nil)
    addTrackingArea(trackingArea)
}

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

override func mouseExited(with event: NSEvent) {
    Swift.print("Mouse exited")
}

现在,您的透明NSView子类将处理鼠标事件,并在鼠标进入和退出视图时触发mouseEnteredmouseExited方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 取消css事件

    auto 与pointer-events属性未指定时的表现效果相同,对于SVG内容,该值与visiblePainted效果相同 none (一般会用到它,其他属性值很小使用) 元素永远不会成为鼠标事件的target。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器。 visiblePainted 只适用于SVG。元素只有在以下情况才会成为鼠标事件的目标: visibility属性值为visible,且鼠标指针在元素内部,且fill属性指定了none之外的值 visibility属性值为visible,鼠标指针在元素边界上,且stroke属性指定了none之外的值 visibleFill 只适用于SVG。只有在元素visibility属性值为visible,且鼠标指针在元素内部时,元素才会成为鼠标事件的目标,fill属性的值不影响事件处理。 visibleStroke 只适用于SVG。只有在元素visibility属性值为visible,且鼠标指针在元素边界时,元素才会成为鼠标事件的目标,stroke属性的值不影响事件处理。 visible 只适用于SVG。只有在元素visibility属性值为visible,且鼠标指针在元素内部或边界时,元素才会成为鼠标事件的目标,fill和stroke属性的值不影响事件处理。 painted 只适用于SVG。元素只有在以下情况才会成为鼠标事件的目标: 鼠标指针在元素内部,且fill属性指定了none之外的值 鼠标指针在元素边界上,且stroke属性指定了none之外的值 visibility属性的值不影响事件处理。 fill 只适用于SVG。只有鼠标指针在元素内部时,元素才会成为鼠标事件的目标,fill和visibility属性的值不影响事件处理。 stroke 只适用于SVG。只有鼠标指针在元素边界上时,元素才会成为鼠标事件的目标,stroke和visibility属性的值不影响事件处理。 all 只适用于SVG。只有鼠标指针在元素内部或边界时,元素才会成为鼠标事件的目标,fill、stroke和visibility属性的值不影响事件处理。 示例

    01
    领券