Вот что я узнал.Поскольку iOS4,
[[UIScreen mainScreen] applicationFrame].size.width;
и
[[UIScreen mainScreen] applicationFrame].size.height;
дают измерения в «точках», а не в «пикселях».Для всего остального пиксели = точки, но для iPhone4 каждая точка имеет 4 пикселя.Нормальные изображения масштабируются в iPhone4, поэтому каждый пиксель изображения отображается на точку.Это означает, что iPhone4 может запускать приложения iPhone без заметных изменений.
«яблочный» способ добавления изображений «высокого разрешения», использующих преимущества более высокого разрешения iPhone, состоит в замене «.png» на «@ 2x.png "в имени файла изображения, и удвойте плотность пикселей (фактически, только ширину и высоту) в изображении.Важно отметить, что не меняйте способ ссылки на изображение в вашем коде.
Так что, если в вашем коде есть «img.png», iPhone4 загрузит изображение «img@2x.png», если оно доступно.
Проблема в том, что, если вы пытаетесь разработать приложение Universal и включить отдельные изображения для всех возможных разрешений экрана / плотности пикселей, ваше приложение будет раздуваться довольно быстро.
Распространенным решением этой проблемы является вытягивание всех необходимых изображений из сети.Это сделает ваш бинарный файл красивым и маленьким.С другой стороны, это будет влиять на интернет-квоту вашего пользователя и будет действительно раздражать пользователей, у которых нет Wi-Fi - особенно, если у вашего приложения нет других причин использовать сеть (и выне говорите, что вашему приложению нужна сеть в описании вашего магазина приложений.)
К счастью, я нашел другой способ.Часто, когда вы уменьшаете изображение, iPhone4 достаточно умен, чтобы использовать увеличенную плотность пикселей масштабированного изображения.Например, у вас может быть:
UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100.0, 50.0)];
[indicatorButton setBackgroundImage:
[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateNormal];
Теперь, если buttonImage.png имеет размер 200x100, он будет отлично себя вести во всем.Точно так же, если вы начинаете с красивого изображения 640x960 (пиксель), которое довольно неплохо отображается на iPad, и вы уменьшаете его до изображения 320x480 для небольших экранов, используя что-то вроде:
+ (UIImage*)imageWithImage:(UIImage*)image newX:(float)newX newY:(float)newY{
CGSize newSize=CGSizeMake((CGFloat)newX, (CGFloat)newY);
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newX,newY)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
It должно отображаться довольно неплохо на iPhone4.Хитрость не в том, чтобы удвоить масштабирование.Например, если вы сделаете что-то вроде:
UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100.0, 50.0)];
[indicatorButton setBackgroundImage:
[Utilities imageWithImage:[UIImage imageNamed:@"buttonImage.png"] newX:100 newY:50] forState:UIControlStateNormal];
Тогда вы потеряете плотность пикселей и ваше изображение будет выглядеть «пиксельно» на iPhone4.
Наконец, если выЕсли вы хотите определить, являетесь ли вы iPhone4 (не обязательно, если вы используете описанную выше технику), может пригодиться следующий код:
+(bool)imAnIphone4{
return([[UIScreen mainScreen]respondsToSelector:@selector(scale)] && [UIScreen mainScreen].scale==2);
}