Я устанавливаю 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:
(см. Комментарии).