Почему NotificationCenter не проходит NSPoint должным образом? - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь передать NSPoint через NotificationCenter.Я построил подкласс NSView с определенными тремя методами:

    override func mouseDragged(with event: NSEvent) {
        post(event: event)
    }

    override func mouseDown(with event: NSEvent) {
        post(event: event)
    }

    func post(event: NSEvent) {
        let point  = convert(event.locationInWindow, from: nil)
        print ("sending \(point)")
        NotificationCenter.default.post (
            name: NSNotification.Name.mousePositionChanged,
            object: point )
    }

Я зарегистрировал наблюдателя как:

NotificationCenter.default.addObserver(
                    self,
                    selector: #selector(self.mouseMovedTo(_:)),
                    name: NSNotification.Name.mousePositionChanged,
                    object: nil)

... и функцию для получения:

@objc func mouseMovedTo(_ point:NSPoint) {
    print ("receive \(point)")
}

Уведомление работает - когда я нажимаю кнопку мыши, AppDelegate знает об этом и запускает mouseMovedTo, но получает только точку (0,0):

sending (0.350715866416309, 0.308759973404255)
receive (0.0, 0.0)
sending (0.350187768240343, 0.30802384118541)
receive (0.0, 0.0)
sending (0.349039364270386, 0.306409099544073)
receive (0.0, 0.0)
.....

Как передать правильные значения NSPoint?Это ошибка?

Я пытался передать NSEvent, но у меня была ошибка, когда я пытался convert(event.locationInWindow, from: someView) внутри AppDelegate.Некоторые идеи?

1 Ответ

0 голосов
/ 21 сентября 2018

Вам нужно

@objc func mouseMovedTo(_ notification:NSNotification) {
  print ("receive \(notification.object)")
}
...