#iphone #objective-c #uiimageview
#iPhone #objective-c #uiimageview
Вопрос:
Я использую iPhone 4 с дисплеем retina.
У меня есть формат 60×60 png, который был уменьшен по сравнению с размером 500×500 png, который я использую в качестве ImageView ячейки.
По какой-то причине изображение выглядит немного неровным и размытым, в основном не соответствует стандартам отображения retina.
Что я делаю не так?
Я использую cell.imageView.image = [UIImage imageNamed:@"picture.png"];
Ответ №1:
Попробуйте использовать формат 60×60 png в качестве источника. Скорее всего, это решит ваши проблемы с размытостью и, кроме того, будет дешевле использовать память.
Я также сталкивался с тем, что изображения с измененным размером были размытыми и тому подобное. Я мог бы предположить, что это связано с тем, что изображения сжимаются во время выполнения, хотя я не уверен в этом.
Также помните, что рекомендуется предоставлять две версии вашего файла изображения:
-
Один для обычных разрешений (iPhone 3G, 3GS …): picture.png для вашего случая: 30x30px
-
Один для дисплея retina (iPhone 4): picture@2x.png в вашем случае: 60×60 пикселей.
Комментарии:
1. Файл изображения уже имеет размер 60×60. Это не сокращается во время выполнения.
2. Хорошо, тогда вы должны быть в порядке, просто следуя соглашению об именовании @ 2x 🙂
3. developer.apple.com/library/ios/#documentation/2DDrawing/… Рекомендуется прочитать раздел «Точки в сравнении с пикселями» по этой теме 🙂
4. Спасибо, Джулиан, я просто сделал это и назвал это «picture@2x.png «, но теперь изображение в ячейке очень маленькое. Может быть, 60×60 слишком мало для retina? Какой размер должен быть, если моя строка.height = 70?
5. 70 — это высота в точках, поэтому я думаю, что что-то в районе 110-120 пикселей должно быть подходящим. Опять же, я настоятельно рекомендую вам прочитать статью, которую я опубликовал 🙂
Ответ №2:
Поскольку имя файла не соответствует base@2x.ext
формату, iOS не распознает, что следует использовать масштабный коэффициент 2. Есть два решения:
Лучше всего предоставить две версии изображения: одну для дисплеев, отличных от retina, с именем picture.png
, а другую, вдвое большего размера, для дисплеев retina, с именем picture@2x.png
. Вы бы все равно использовали [UIImage imageNamed:@"picture.png"];
, iOS автоматически замечает, когда на устройстве установлен дисплей retina и есть файл с именем, picture@2x.png
который ему нужно использовать вместо этого.
Простое решение (которое сделало бы ваше изображение вдвое больше на устройствах без retina) заключается в следующем:
cell.imageView.image = [UIImage imageNamed:@"picture.png"];
cell.imageView.image.scale = [UIScreen mainScreen].scale;
Я рекомендую пойти @2x
путем, именно так это и должно быть сделано.
Комментарии:
1. Масштаб доступен только для чтения (по крайней мере, в iOS 5.1). Взлом заключается в том, чтобы UIImage* image = // каким-то образом получить нормальное разрешение изображения, если ([масштаб главного экрана UIScreen] == 2) { image = [UIImage imageWithCGImage: [изображение CGImage] масштаб: 2 ориентация: UIImageOrientationUp]; }