美文网首页
macOS 开发之-NSView

macOS 开发之-NSView

作者: 魔都兰陵王 | 来源:发表于2018-12-26 15:16 被阅读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()
        }
    

    相关文章

      网友评论

          本文标题:macOS 开发之-NSView

          本文链接:https://www.haomeiwen.com/subject/kzjhlqtx.html