Retina & non-retina-совместимая UIImage укладка и позиционирование - PullRequest
0 голосов
/ 29 марта 2012

Мне часто нужно позиционировать и складывать два UIImages в UIView. Например, поместите рамку вокруг (сзади) фотографии, а затем отобразите ее. Указание положения путем изменения кадра изображения не будет работать как с устройствами Retina, так и без устройств Retina, поскольку значения жестко закодированных кадров не будут масштабироваться.

Например, если у меня есть фоторамка с изображением 56x56 (retina), а фактическое изображение - 52x52 (retina), ее нужно разместить на CGRectMake(2, 2, 54, 54) поверх фоторамки. Но если пользователь не на сетчатке, это не удастся, так как эти значения будут неправильными (теперь они CGRectMake(1, 1, 27, 27)).

Как правильно обрабатывать изображения с безопасным разрешением? Есть ли способ объединить два изображения (каждое с обычным и @2x.pngs), которые будут правильно отображаться на экране любого типа?

1 Ответ

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

Вы можете использовать свойство масштаба UIScreen. Это свойство только для чтения. В устройствах до iPhone 4 (без дисплеев сетчатки) это значение будет равно 1,0, но при дисплеях сетчатки значение равно 2,0. Таким образом, вы можете сохранить это свойство в локальной переменной, скажем, под названием CGFloat scaleFactor, и умножить его на значения выше:

CGFloat scaleFactor=[[UIScreen mainscreen] scale];
... = CGRectMake(1.0*scalefactor,1.0*scaleFactor,27.0*scaleFactor,27.0*scaleFactor);
...