NSClickGestureRecognizer.location (in :) и hitTest () - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующий вид:

Screenshot

, который имеет собственный класс, основанный на NSVisualEffectView, и содержит представление изображения, метку (NSTextField) и всплывающая кнопка.isFlipped пользовательского представления всегда равно false.

Пользовательское представление также содержит NSClickGestureRecognizer, в котором используется делегат.Делегат реализует только один метод:

func gestureRecognizerShouldBegin(_ gestureRecognizer: NSGestureRecognizer) -> Bool {
    let thePoint = gestureRecognizer.location(in: view)

    if let theView = view.hitTest(thePoint) {
        return !theView.handlesMouseEvents
    }
    else {
        return true
    }
}

Если я щелкну в середине всплывающего меню, location(in:) возвращает значение (182, 16), например.Это кажется правильным для меня без переворота.Но hitTest() возвращает фоновое представление для этой точки как результат, а не всплывающую кнопку.

Что я делаю не так?

Если я использую точку перевернутого вручную (y := height - y) дляв результате тестирования я получаю всплывающую кнопку.Но я не хочу использовать этот подход, потому что он кажется мне уродливым.

Если мне кажется, что это работает, если я использую представление содержимого окна для тестирования попаданий.Но я все еще хотел бы знать, почему показанный подход не работает.

1 Ответ

0 голосов
/ 15 декабря 2018

Параметр point из hitTest(_:) равен

Точка, которая находится в системе координат суперпредставления вида, а не самого вида.

Решение: передать точку в координатах суперпредставления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...