如何为NSPoint返回未定义的值

时间:2018-08-04 21:08:46

标签: swift appkit nsevent nspoint

我正在学习快速开发方法,并且正在尝试制作一个简单的应用程序,使用键盘在该应用程序中移动对象(默认出厂)。我正在设计一个表示左键按下的事件。由于我不需要将鼠标放在特定位置,因此NSLocation对我没有真正的用处。官方文档告诉我返回变量locationInWindow,这是我的NSPoint for NSLocation,未定义。

我不确定这是什么意思。我尝试使用_undefined关键字,但是出现了:

无法将类型'(@autoclosure()-> String,StaticString,UInt)-> _'的值转换为指定的类型'NSPoint'(aka'CGPoint')

这是我的代码

        var locationInWindow : NSPoint{
        return _undefined
    }

    let movingLeftEvent = NSEvent.keyEvent(with:NSEvent.EventType.keyDown, location: nil, modifierFlags:[], timestamp: [], windowNumber: 0, context: nil , characters: <#String#>, charactersIgnoringModifiers: <#String#>, isARepeat: false, keyCode: <#UInt16#>)

1 个答案:

答案 0 :(得分:1)

您只需要addLocalMonitorForEvents到您的视图控制器

NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
    self.keyDown(with: $0)
    return $0
}

并实现您的自定义keyDown方法:

override func keyDown(with event: NSEvent) {
    switch event.keyCode {
    case  123:
        // run left arrow code action
        ship.runAction(
            SCNAction.repeatForever(
                SCNAction.rotateBy(x: 0, y: -2, z: 0, duration: 1)
            )
        )
    case  124:
        // run right arrow code action
        ship.runAction(
            SCNAction.repeatForever(
                SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1)
            )
        )
    default:
        print("event.keyCode:", event.keyCode)
    }
}

Sample