UIImageView, CGImage и Retina Art - PullRequest
       13

UIImageView, CGImage и Retina Art

2 голосов
/ 08 февраля 2012

У меня есть несколько CALayers в моем интерфейсе, и я рисую изображения непосредственно в слои, в отличие от imageViews.

Вот фрагмент:

UIImage *anImage = [UIImage imageNamed:@"anyImage"];
CGImageRef anImageRef = [anImage CGImage];
CALayer *aLayer = [CALayer layer];
CGFloat anImageWidth = CGImageGetWidth(anImageRef);
CGFloat anImageHeight = CGImageGetHeight(anImageRef);
CGRect layerFrame = CGRectMake(0,0,anImageWidth, anImageHeight);
[aLayer setLayerContents:(__bridge id)anImageRef];
[parentLayer addSublayer:aLayer];

Так что мой проблема в том, что я получаю противоречивые результаты с размером изображения.На устройстве Retina изображение, которое появляется, в два раза больше ожидаемого размера (например, оно соответствует размеру пикселя изображения @ 2x).На симуляторе в режиме сетчатки изображение, нарисованное на слое, имеет ожидаемый размер (где точки соответствуют пикселям не изображения сетчатки).

Вместо статического задания размера, илиуменьшить размер наполовину (что исправляет проблему на устройстве, но нарушает совместимость с дисплеями без сетчатки), что является хорошим решением или обходным путем для этого сценария?Почему это происходит?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

UIImage содержит свойство масштаба.Это будет 2,0 для отображения изображений сетчатки.См. документы для получения дополнительной информации.

1 голос
/ 08 февраля 2012

CGImageGetWidth() и CGImageGetHeight() возвращают количество пикселей , тогда как размер изображения вам нужен в точках .Вместо этого используйте -[UIImage size].

...