UIImageView, CGImage и Retina Art

У меня есть несколько 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];

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

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


person isaac    schedule 08.02.2012    source источник


Ответы (2)


UIImage содержит свойство масштаба. Это будет версия 2.0 для изображений на дисплее сетчатки. Дополнительную информацию см. в документах. .

person user1118321    schedule 08.02.2012
comment
По какой-то причине мой мозг сказал мне, что масштаб является свойством изображений, а не изображений, поэтому в следующий раз я вместо этого спрошу документы. Спасибо за напоминание. - person isaac; 08.02.2012

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

person Costique    schedule 08.02.2012