NSTrackingArea(監(jiān)視區(qū)域)監(jiān)聽(tīng)鼠標(biāo)的移入/內(nèi)部移動(dòng)/移出事件


響應(yīng)鼠標(biāo)的mouseEnteredmouseExited、mouseMoved回調(diào)方法,需要為對(duì)應(yīng)NSView實(shí)例添加上NSTrackingArea(監(jiān)視區(qū)域)~

如下代碼,將NSTrackingArea(監(jiān)視區(qū)域)添加到了self.view上:

import Cocoa

class ViewController: NSViewController {
    var kb_V: NSView?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        
        self.view.wantsLayer = true
        self.view.layer?.backgroundColor = NSColor.purple.cgColor
        
        kb_V = NSView(frame: NSMakeRect(100, 100, 300, 300))
        self.view .addSubview(kb_V!)
        kb_V!.wantsLayer = true
        kb_V!.layer?.backgroundColor = NSColor.cyan.cgColor
        
        
        //添加——追蹤‘鼠標(biāo)’的區(qū)域
        //【一】通過(guò)枚舉項(xiàng)的原始值`rawValue`來(lái)通過(guò)“|”或運(yùn)算,得到新的NSTrackingArea.Options來(lái)使用
        let opt = (
            NSTrackingArea.Options.mouseEnteredAndExited.rawValue |
                NSTrackingArea.Options.mouseMoved.rawValue |
                NSTrackingArea.Options.activeAlways.rawValue
        )
        let trackingArea = NSTrackingArea(rect: kb_V!.frame, options: NSTrackingArea.Options(rawValue: opt), owner:self, userInfo: nil)
        self.view .addTrackingArea(trackingArea)
//        //【二】通過(guò)枚舉項(xiàng)合成一個(gè)數(shù)組,作為NSTrackingArea.Options來(lái)使用
//        let trackingArea = NSTrackingArea(rect: kb_V!.frame, options: [NSTrackingArea.Options.mouseEnteredAndExited, NSTrackingArea.Options.mouseMoved, NSTrackingArea.Options.activeAlways], owner:self, userInfo: nil)
//        self.view .addTrackingArea(trackingArea)
        
    }
    
    //MARK:Mouse鼠標(biāo)的響應(yīng)
    override func mouseMoved(with event: NSEvent) {
        //event.type——判斷鼠標(biāo)的操作、event.locationInWindow——獲取鼠標(biāo)的位置
        let eventType = event.type
        let locPoint = event.locationInWindow
        print("eventType:\(eventType.rawValue),locPoint:\(locPoint)")//eventType.rawValue為5
    }
    override func mouseEntered(with event: NSEvent) {
        //event.type——判斷鼠標(biāo)的操作、event.locationInWindow——獲取鼠標(biāo)的位置
        let eventType = event.type
        let locPoint = event.locationInWindow
        print("eventType:\(eventType.rawValue),locPoint:\(locPoint)")//eventType.rawValue為8
        kb_V?.layer?.backgroundColor = NSColor.brown.cgColor    //顏色改為棕色
    }
    override func mouseExited(with event: NSEvent) {
        //event.type——判斷鼠標(biāo)的操作、event.locationInWindow——獲取鼠標(biāo)的位置
        let eventType = event.type
        let locPoint = event.locationInWindow
        print("eventType:\(eventType.rawValue),locPoint:\(locPoint)")//eventType.rawValue為9
        kb_V?.layer?.backgroundColor = NSColor.cyan.cgColor     //顏色改回青色
    }
    
}


效果:a.當(dāng)鼠標(biāo)移入NSTrackingArea(監(jiān)視區(qū)域)范圍時(shí),打印event.type為8和(該時(shí)刻)鼠標(biāo)的位置—顏色改為棕色、b.當(dāng)鼠標(biāo)在NSTrackingArea(監(jiān)視區(qū)域)范圍內(nèi)進(jìn)行移動(dòng)時(shí),打印event.type為5和鼠標(biāo)的位置、c.當(dāng)鼠標(biāo)移出 NSTrackingArea(監(jiān)視區(qū)域)范圍時(shí),打印event.type為9和(該時(shí)刻)鼠標(biāo)的位置—顏色改回青色!



其他更多鼠標(biāo)/鍵盤(pán)事件監(jiān)聽(tīng),可參考Mac 鼠標(biāo)/鍵盤(pán)事件的監(jiān)聽(tīng)和模擬








goyohol's essay

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容