Ни один из этих ответов не учитывает, что представление может быть не прямоугольным.
Вот универсальный метод, который работает и на непрямоугольных видах. Подумайте циферблат или сложная форма пути.
Этот фрагмент кода даст вам localPoint из globalPoint (он же globalToLocal). (GlobalPoint в пространстве окна 0,0) Если вы измените аргумент на «toView», то получите точку «localToGlobal».
let localPoint = convertPoint(aPoint, fromView: self.window?.contentView)
Нижеследующий код вернул бы true или false, если точка находилась внутри пути или нет.
CGPathContainsPoint(someCGPath,nil,localPoint,true)
Примечание:
aPoint - это globalPoint, полученный из параметра в hitTest, он также может быть получен из:
(self.window?.mouseLocationOutsideOfEventStream)!
Примечание :
Там может быть более правильный способ сделать это. Но это работает и не заботится о перевернутых представлениях.