mouseMoved запускается за пределами NSTrackingArea - PullRequest
0 голосов
/ 13 января 2019

Я устанавливаю NSTrackingArea для определенной части моего NSTextView, чтобы методы mouseMoved и т. Д. Запускались только внутри этого прямоугольника. Вот мой код:

let rect = ...
let ta = NSTrackingArea(rect: rect,
                     options: [.mouseEnteredAndExited, .mouseMoved, .activeWhenFirstResponder, .inVisibleRect],
                       owner: self,
                    userInfo: nil)
addTrackingArea(ta)

Однако, mouseMoved и соавт. уволены за весь вид.

Итак, мой вопрос: почему mouseMoved срабатывает, когда мышь находится вне области отслеживания? Есть ли ошибка в коде выше?

EDIT:

Видимо, где-то добавляется отслеживающая область для всего представления, как я вижу на панели отладки:

[NSTrackingArea 0x60000212a3f0: rect={{0, 0}, {800, 319.5}}, owner=0x60000390da00 userData=(null)
    NSTrackingMouseEnteredAndExited NSTrackingMouseMoved 
    NSTrackingActiveWhenFirstResponder
    NSTrackingInVisibleRect 
    installed enabled ]

Удаление super.updateTrackingAreas() не меняет этого, так что происходит что-то еще. Я могу удалить его с помощью trackingAreas.forEach { if $0.rect == self.bounds { removeTrackingArea($0)} }, но, кажется, он добавляется обратно при срабатывании mouseMoved: (см. Комментарии).

...