Измените размер изображения в UITableViewCell, чтобы не быть полной высоты - PullRequest
4 голосов
/ 20 августа 2010

В настоящее время я пытаюсь показать простую таблицу в своем приложении iPhone, где я использую UITableViewCell со стилем UITableViewCellStyleValue1 (изображение слева, метка детализации справа выровнена). Все ячейки имеют высоту по умолчанию (50.0f). Прежде чем добавить изображение в ячейку, я изменяю размер изображения до 40x40, чтобы оно не было общей высотой ячейки (я думаю, это выглядит некрасиво).

Я делаю это с помощью этого кода:

cell.imageView.image = [UIImage imageNamed:@"icon.png"];
cell.imageView.image = [RootViewController imageWithImage:cell.imageView.image scaledToSize:CGSizeMake(40, 40)];

Это все очень хорошо и работает без нареканий. Но я хочу сделать это также на iPhone 4 (с экраном с более высоким разрешением). Проблема в том, что на iPhone 4 все без проблем масштабируется, но изображения выглядят очень точечно.

Причина этого, конечно, в том, что все на экране раздуто до нового разрешения, в том числе и изображения, поэтому изображения, вероятно, должны быть примерно 80х80. Но когда я изменяю их размеры до 80x80 (оригиналы имеют размер 120x120), они кажутся слишком большими из-за масштабирования.

Есть ли способ на самом деле сделать мои изображения не полной высоты табличного элемента, но я хочу, чтобы они были в более высоком разрешении на iPhone 4. Должен ли я создать для этого совершенно новый вид?

Упс, после первого ответа я понял, что моя собственная письменная функция отсутствует:

+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
    UIGraphicsBeginImageContextWithOptions(newSize, NO, [[UIScreen mainScreen] scale]);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

Как видите, после первого ответа я попытался заставить это работать с методом UIGraphicsBeginImageContextWithOptions , но каким-то образом это приводит к пустому изображению.

1 Ответ

5 голосов
/ 20 августа 2010

Полагаю, вы написали "imageWithImage: scaledToSize:", верно?

Я также предполагаю, что вы используете "UIGraphicsBeginImageContext (yourSize)" в этом вызове. Замените это на UIGraphicsBeginImageContextWithOptions (yourSize, NO, 2.0), если ваша платформа iPhone 4.

«2.0» определяет масштабный коэффициент для точек (размер определяется в точках, а не в пикселях). На дисплее перед сетчаткой точка составляет 1x1 пиксель. На сетчатке отображается точка 2х2 пикселя.

Edit: Убедитесь, что в ваших ресурсах есть версия icon.png с высоким разрешением, называемая icon@2x.png. Это автоматически загружается в случае, если это дисплей сетчатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...