2013-08-23 14 views
3

Я переопределяю draggingUpdated: в подклассе WebView. Таким образом, я могу получить NSPoint, где в настоящее время перетаскивания назначения [(id<NSDraggingInfo>)sender draggingLocation]Преобразование NSPoint из координат окна

Я хочу, чтобы получить эту NSPoint и «преобразовать» его координаты вWebView, а затем получить базовый элемент в этой точке с WebViewelementAtPoint:

Дело в том, что у меня есть NSPoint, и у меня также есть рамки/рамки WebView. Как этот конвертируемый?

ответ

6

Неправильно использовать для этого -convertPointFromBase:. Этот метод устарел, и предлагаемая замена (-convertPointFromBacking:) не подходит для этой цели, поскольку предполагает, что входная точка находится в системе координат хранилища. (Это фактически дает намек на первоначальную цель -convertPointFromBase:, которая была частью заброшенных попыток эпохи Леопард с поддержкой высокого разрешения. «Базовая система координат», из которой она преобразуется, должна была быть выровнена по пикселям. Поиск «Pixel Alignment и преобразование Просмотр координат к и от„Base“Space» в Leopard AppKit release notes.)

-convertPoint:fromView: вы хотите, и вы должны пройти nil для параметра fromView. См. Cocoa Drawing Guide: Coordinate Systems and Transforms – Converting from Window to View Coordinates.

+0

Спасибо большое! :-) –

+0

Я знаю, что это старо, но стоит напомнить, что для этого также требуется перевернуть координату Y. Содержимое WebView имеет верхнее левое начало. AppKit использует нижний левый. – uchuugaka

+0

@uchuugaka, я не знаю о WebView, но метод уже позаботился о просмотренных взглядах. Получатель знает, перевернуто или нет (и может запросить всех предков между ним и окном) и правильно преобразует точку соответственно. Метод действительно делает то, что он говорит. Он преобразует точку в координатах окна в точку в собственной системе координат представления. –

0

ОК, ничего себе. Просто наткнулся на один из тех случаев, когда Какао кажется совершенно потрясающим:

[self convertPointFromBase:point]; 

Да, это все, что нужно.

+0

Старый пост, но все же, это не приятно. Кроме того, convertPointFromBase устарел. Ответ Кена вернее. – Tiago

Смежные вопросы