Правильно ли CGContextConvertRectToDeviceSpace работает на устройствах retina?


Я создаю основное текстовое приложение на базе iOS (iOS 5, iPad), и у меня есть представление, в котором я выполняю некоторые типографские вычисления (в drawRect).

Я заметил, что когда я использую CGContextConvertRectToDeviceSpace, результат, который я получаю на устройстве retina, вдвое больше, чем на устройстве без retina. Насколько я понимаю, в drawRect применяется неявное преобразование, которое должно скрывать любые различия между устройствами retina/non-retina, поэтому я не понимаю, почему я должен их видеть разница вообще есть.

Более конкретно, я пытаюсь вычислить местоположение в пользовательских координатах заданной CTLine в пользовательских пространственных координатах. Я сначала использую CTLineGetTypographicBounds для моей линии, и использовать эти значения в CGContextConvertRectToDeviceSpace, чтобы получить прямоугольник... но прямая кишка, которую я получаю обратно, имеет двойную ширину и высоту на сетчатке по сравнению с устройством без сетчатки. Может быть, я чего-то не понимаю?

1 3

1 ответ:

Я заметил, что когда я использую CGContextConvertRectToDeviceSpace, результат, который я получаю на устройстве retina, вдвое больше, чем на устройстве без retina.

Звучит нормально для меня. "Пространство устройства" представляет собой фактические пиксели на выходном устройстве, которое в данном случае является дисплеем retina. Обычно он масштабируется в 2 раза больше, чем система координат пользовательского пространства CGContext.

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

Чего вы пытаетесь достичь, используя CGContextConvertRectToDeviceSpace? Может быть, есть альтернатива.