移动鼠标时未调用 mouseMoved 函数?

Posted

技术标签:

【中文标题】移动鼠标时未调用 mouseMoved 函数?【英文标题】:mouseMoved function not called when I move the mouse? 【发布时间】:2017-03-28 03:08:52 【问题描述】:

我试图在 SKScene 中查找鼠标坐标,但是没有调用 moveMouse 函数。 (顺便说一下,这是在 Swift Playground 中) 我甚至编写了一个打印函数来测试该函数是否被调用,但它完全没有打印任何内容。

这就是我设置 NSTrackingArea 的方式:

    let options = [NSTrackingAreaOptions.mouseMoved, NSTrackingAreaOptions.activeInKeyWindow, NSTrackingAreaOptions.activeAlways, NSTrackingAreaOptions.inVisibleRect, ] as NSTrackingAreaOptions
    let tracker = NSTrackingArea(rect: viewFrame, options: options, owner: self.view, userInfo: nil)
    self.view?.addTrackingArea(tracker)

这里是 mouseMoved 函数(没有被调用的那个)

override public func mouseMoved(with event: NSEvent) 

        point = event.location(in: self)
        print(point)
    

没有调用 mouseMoved 是否有原因?

【问题讨论】:

您是否设置了带有实时视图的游乐场?否则,您的代码将执行一次,但 Playground 将不会继续监视用户事件或响应事件。 是的,我确实设置了实时取景。只是为了确认一下,这就是您应该设置的方式,对吗? let scene = Scene(size: CGSize(width: 1080, height: 1080)) scene.backgroundColor = #colorLiteral(red: 0.4078431373, green: 0.7843137255, blue: 0.6509803922, alpha: 1) scene.scaleMode = .aspectFit let view = SKView(frame: NSRect(x: 0, y: 0, width: 1920, height: 1080)) PlaygroundPage.current.needsIndefiniteExecution = true view.presentScene(scene) PlaygroundPage.current.liveView = view 是的,应该可以。在我做一些检查后会就鼠标移动问题回复你 - 现在必须出去,但会回复你。但是有一个问题,您是如何(或者更确切地说,在哪里)添加mouseMoved 方法的? 我在我的自定义 SKScene 类中添加了 mouseMoved 方法。 【参考方案1】:

我使用以下代码(并且只有该代码)创建了一个游乐场:

import AppKit
import SpriteKit
import PlaygroundSupport

class Scene:SKScene 
    override public func mouseMoved(with event: NSEvent) 
        let point = event.location(in: self)
        print(point)
    


let frame = CGRect(x:0, y:0, width:1920, height:1080)
let view = SKView(frame:frame)
let scene = Scene(size: CGSize(width: 1080, height: 1080))
scene.backgroundColor = #colorLiteral(red: 0.4078431373, green: 0.7843137255, blue: 0.6509803922, alpha: 1)
scene.scaleMode = .aspectFit

let options = [NSTrackingAreaOptions.mouseMoved, NSTrackingAreaOptions.activeInKeyWindow, NSTrackingAreaOptions.activeAlways, NSTrackingAreaOptions.inVisibleRect, ] as NSTrackingAreaOptions
let tracker = NSTrackingArea(rect:frame, options: options, owner:view, userInfo: nil)
view.addTrackingArea(tracker)

PlaygroundPage.current.needsIndefiniteExecution = true
view.presentScene(scene)
PlaygroundPage.current.liveView = view

然后,我通过单击工具栏中的“显示助手编辑器”按钮打开了 Playground Timeline 视图。我还打开了 Debug 区域,以便可以看到控制台。

此时,时间轴视图显示为绿色视图。我将鼠标指针移到绿色视图上,我可以看到在控制台中打印出鼠标坐标。所以,据我所知,上面的代码运行良好。

能否请您尝试一下最后的代码,看看会发生什么?

【讨论】:

我在 SKScene 课程中设置了 NSTracker。将它移动到你拥有它的地方!非常感谢!

以上是关于移动鼠标时未调用 mouseMoved 函数?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript和jquery事件--鼠标移动事件mousemove

如何实现通过鼠标移动dataGridView中的行

Selenium 的 mouseMove() 和实际的鼠标移动有啥区别?

delphi高手来!!! WM_MOUSEMOVE

鼠标事件

vue+mousemove实现拖动,鼠标移动过快拖动就失效