macOS 开发之-NSView

2018-12-26  本文已影响41人  魔都兰陵王
设置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()
    }
上一篇下一篇

猜你喜欢

热点阅读