设置View的背景色
// 设置 背景色
view.wantsLayer = true
view.layer?.backgroundColor = NSColor.orange.cgColor
鼠标事件流
1、鼠标硬件先接收到用户点击;
2、然后交给鼠标驱动来处理,这个驱动是在Mac OS X内核运行的;
3、处理完就通过 I/O Kit 传递给window server的事件队列。
4、而window server则负责分派这些事件到对应进程的run-loop。
鼠标事件监控
自定义View继承于NSView,在drawRect中添加 NSTrackingArea,否则,即使实现了监控方法,也不会调用。
//自定义view中添加以下代码实现NSTrackingArea
var trackingArea: NSTrackingArea!
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
trackingArea = NSTrackingArea(rect: dirtyRect,
options:[.mouseEnteredAndExited, .mouseMoved, .cursorUpdate, .activeWhenFirstResponder, .activeInKeyWindow,
.activeInActiveApp, .activeAlways, .assumeInside, .inVisibleRect, .enabledDuringMouseDrag],
owner: self,
userInfo: nil)
self.addTrackingArea(trackingArea)
self.becomeFirstResponder()
}
跟踪区域选项
// 鼠标进入和退出
public static var mouseEnteredAndExited: NSTrackingArea.Options { get }
// 鼠标移动
public static var mouseMoved: NSTrackingArea.Options { get }
// 光标更新
public static var cursorUpdate: NSTrackingArea.Options { get }
// 第一响应者时所有事件
public static var activeWhenFirstResponder: NSTrackingArea.Options { get }
// 是keyWindow时所有事件
public static var activeInKeyWindow: NSTrackingArea.Options { get }
// 应用是激活状态时,所有事件
public static var activeInActiveApp: NSTrackingArea.Options { get }
// 所有事件
public static var activeAlways: NSTrackingArea.Options { get }
// 假设在里面??
public static var assumeInside: NSTrackingArea.Options { get }
// 可见区域事件
public static var inVisibleRect: NSTrackingArea.Options { get }
// 鼠标拖拽时
public static var enabledDuringMouseDrag: NSTrackingArea.Options { get }
事件监控
// 按键抬起(输入类控件NSTextField 有效)
override func keyUp(with event: NSEvent) {
}
//按键按下(输入类控件NSTextField 有效)
override func keyDown(with event: NSEvent) {
}
//左键按下
override func mouseDown(with event: NSEvent) {
}
//左键抬起
override func mouseUp(with event: NSEvent) {
}
//鼠标移动
override func mouseMoved(with event: NSEvent) {
}
//按住左键拖拽
override func mouseDragged(with event: NSEvent) {
}
//鼠标划出View
override func mouseEntered(with event: NSEvent) {
}
//鼠标划出View
override func mouseExited(with event: NSEvent) {
}
//滚轮等抬起
override func otherMouseUp(with event: NSEvent) {
}
//滚轮..等按下
override func otherMouseDown(with event: NSEvent) {
}
//右键抬起
override func rightMouseUp(with event: NSEvent) {
}
//右键按下
override func rightMouseDown(with event: NSEvent) {
}
//按住右键进行拖拽
override func rightMouseDragged(with event: NSEvent) {
}
鼠标点击的位置
// event 在window中的坐标
let eventLocation = event.locationInWindow
// 在view视图坐标中的坐标
let center = convert(eventLocation, from: nil)
鼠标样式
/// 设置鼠标的样式 样式有很多,可以用Cmd+Ctrl按住openHand到头文件中查看
override func cursorUpdate(with event: NSEvent) {
NSCursor.openHand.set()
}
网友评论