鼠标移入事件_NSTrackingArea 监听鼠标移入与移出事件

本文介绍了如何在Mac应用中利用NSTrackingArea来监听并处理鼠标移入和移出事件,包括在NSView和NSViewController中的实现方法。
摘要由CSDN通过智能技术生成

cb138186701853a22a80667f27198f5c.png

在NSView中:

   var area:NSTrackingArea! 

   override func updateTrackingAreas() {
        if area != nil {
            self.removeTrackingArea(area)
        }
        
        let opt = (
             NSTrackingArea.Options.mouseEnteredAndExited.rawValue | 
             NSTrackingArea.Options.mouseMoved.rawValue | 
             NSTrackingArea.Options.activeAlways.rawValue
         )
        
        area = NSTrackingArea.init(rect: self.bounds, options: NSTrackingArea.Options(rawValue: opt), owner: self, userInfo: nil)
        
        self.addTrackingArea(area)
    }

    override func mouseEntered(with event: NSEvent) {
        self.wantsLayer = true
        self.layer?.backgroundColor = NSColor.init(hex: "#F7FBFF").cgColor
    }
    override func mouseExited(with event: NSEvent) {
        self.wantsLayer = true
        self.layer?.backgroundColor = NSColor.clear.cgColor
    }

    deinit {
        self.removeTrackingArea(area)
    }

在NSViewController中:

    var area:NSTrackingArea!
    
    override func viewDidLayout() {
        super.viewDidLayout()
        if area != nil { self.view.removeTrackingArea(area) }
        
        let opt = (
             NSTrackingArea.Options.mouseEnteredAndExited.rawValue | 
             NSTrackingArea.Options.mouseMoved.rawValue | 
             NSTrackingArea.Options.activeAlways.rawValue
         )

        area = NSTrackingArea.init(rect: self.view.bounds, options: NSTrackingArea.Options(rawValue: opt), owner: self, userInfo: nil)
        self.view.addTrackingArea(area)
    }

    override func mouseEntered(with event: NSEvent) {
        self.view.wantsLayer = true
        self.view.layer?.backgroundColor = NSColor.init(hex: "#F7FBFF").cgColor
    }
    
    override func mouseExited(with event: NSEvent) {
        self.view.wantsLayer = true
        self.view.layer?.backgroundColor = NSColor.clear.cgColor
    }
    
    deinit {
        self.view.removeTrackingArea(area)
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值