Ошибка при настройке -setWantsLayer: на Lion - PullRequest
1 голос
/ 20 марта 2012

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

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

Симуляция:

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

С setWantsLayer: YES

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

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

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

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

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

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

1 Ответ

1 голос
/ 26 марта 2012

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

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

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

Спасибо mikeash.

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

...