要響應(yīng)鼠標(biāo)的mouseEntered、mouseExited、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)和模擬》