2012-03-20 8 views
1

У меня есть подкласс NSView, где я обрабатываю событие -mouseDown: для получения позиции щелчка на экране. С этой позицией я определил точку, которую я буду использовать для создания прямоугольника на -drawRect: он работает нормально.Ошибка при настройке -setWantsLayer: on Lion

НО ... когда я настраиваю хочет, что все не работает. Когда я получаю позицию ввода, я посмотрел, что ось Y имеет увеличение на 20 пунктов, и я не знаю, что происходит ... Может ли кто-нибудь объяснить? Как я исправить эту проблему?

Моделирование:

я нажимаю на координаты х: 100; y: 100; и drawRect рисует прямоугольник на x: 100; y: 100; Все в порядке, это то, чего я хочу.

С setWantsLayer: ДА

я нажимаю на координаты х: 100; y: 100; и drawRect рисует прямоугольник на x: 100; y: 120; (или что-то вроде этого)

Возможно ли использовать CALayers без установки -setWantsLayer в YES? Я пытаюсь понять это, но я понятия не имею, что происходит ... Мне нужна твоя помощь.

ОБНОВЛЕНИЕ: Я пытаюсь понять это, и сейчас я провел много тестов ... Теперь я могу сказать, что проблема связана с -mouseDown: из NSView, когда я настраивал -setWantsLayer, 't работает, как ожидается больше ...

У меня в моем окне CustomView, и я создал подкласс NSView и задан как класс CustomView. CustomView находится в позиции (0, 20). Координатная ориентация не переворачивается.

Я считаю, что когда я настраивал NSView, нужно, чтобы слой -mouseDown: обновить фрейм до позиции (0, 0) (или, другими словами, получить рамку NSWindow) вместо (0, 20). Когда это происходит, каждая позиция из -mouseDown: получает увеличение на 20 точек по оси Y. Я не знаю, правильно ли я говорю, но это факты, которые я получаю в результате моих тестов.

Кто-то может помочь мне разобраться в этом?

ответ

1

Теперь с помощью mikeash из (#macdev @ frenoode) я решил этот вопрос.

Проблема заключалась в том, как я преобразовывал возврат точки из -mouseDown: event. Я использовал -convertPointFromBacking: и, как сказал mikeash, «проблема в том, что -convertPointFromBacking: неверно для преобразования точки, возвращаемой из locationInWindow». «Потому что locationInWindow не находится в« системе координат хранилища с выравниванием по пикселям ».

Я изменил на -convertPoint: fromView: like: [sender convertPoint: [mEvent locationInWindow] fromView: nil]; и он работает хорошо!

Благодарим вас за mikeash.

И я отправляю ответ здесь, чтобы помочь другим с тем же вопросом.

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