2017-01-21 11 views
0

У меня есть пользовательский класс NSButton и вы хотите проверить (в пределах viewWillDraw), если текущее местоположение мыши находится внутри рамки кнопок.Доказать, если расположение курсоров находится в кадре NSButton

я получаю позицию мыши с помощью NSEvent.mouseLocation(), но это дает мне абсолютноеNSPoint по отношению к самому экрану.

self.frame (= NSButton.frame) вместо этого возвращает относительные координаты, ссылаясь на кнопки superview.

В результате self.frame.contains(NSEvent.mouseLocation()) не работает, и я понятия не имею, как это решить!

Цените любую помощь!

+0

Вы можете попытаться преобразовать положение мыши в рамку кнопки. В ios uiview есть метод для преобразования точек с одного вида на другие и наоборот. – Dasem

+0

@ Dasem Спасибо за ваш ответ! Не удалось выяснить, как это сделать. 'NSButton' - это не представление. – ixany

ответ

1

Вы можете добавить NSTrackingArea с NSTrackingAreaOptions.MouseEnteredAndExited к вашей кнопке

Или вы можете использовать этот код

Преобразование NSPoint в SuperView системы координат

let point = self.superview!.convert(self.window!.mouseLocationOutsideOfEventStream, from: nil)

А затем просто использовать себя. frame.contains

if self.frame.contains(point)

+0

Спасибо за ваш ответ! В моем случае мне особенно нужно проверить это в 'viewWillDraw', потому что я не могу ввести мышь, и я хочу изменить поведение кнопок в зависимости от этого. – ixany

+0

помогает ли это сейчас? –

+0

Большое спасибо Виталию! Теперь он отлично работает. – ixany