iPhone/Objective-C TLauncherView загружает изображения с высоким разрешением по URL-адресу

Я использую TTLauncherView от Three20, и мне интересно, есть ли у кого-нибудь опыт загрузки изображений с высоким разрешением?

http://three20.info/showcase/launcher

Я использую следующий метод для установки TTLauncherItem:

NSString *imageUrl = [self displayImageUrl:@"http://foo.com/lowres.png" withHighResUrl:@"http://foo.com/hires.png";
TTLauncherItem *launcherItem = [[[TTLauncherItem alloc] initWithTitle:@"Icon1"
                                                                image:imageUrl
                                                                  URL:@"Icon1"
                                                            canDelete:NO] autorelease];

Это метод, который я использую, чтобы определить, является ли это iOS4.

- (NSString *)displayImageUrl:(NSString *)standardResUrl withHighResUrl:(NSString *)highResUrl {
    NSString *imageUrl = nil;
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) {
        imageUrl = highResUrl;
    } else {
        imageUrl = standardResUrl;
    }

    return imageUrl;
}

Проблема в том, что изображения на самом деле отображаются в полном размере на iPhone 4, тогда как любое устройство iOS ниже iPhone 4 отображается правильно. Просто интересно, нужно ли мне вносить изменения в библиотеку TTLauncherView или есть более простой способ решить такую ​​​​проблему.


person fulvio    schedule 21.03.2011    source источник


Ответы (2)


Я добился этого, добавив новый стиль в свою таблицу стилей three20 на основе файла launcherButtonImage. Это оригинал...

     - (TTStyle*)launcherButtonImage:(UIControlState)state {
      TTStyle* style =
        [TTBoxStyle styleWithMargin:UIEdgeInsetsMake(-7, 0, 11, 0) next:
        [TTShapeStyle styleWithShape:[TTRoundedRectangleShape shapeWithRadius:8] next:
        [TTImageStyle styleWithImageURL:nil defaultImage:nil contentMode:UIViewContentModeCenter
                      size:CGSizeZero next:nil]]];

      if (state == UIControlStateHighlighted || state == UIControlStateSelected) {
          [style addStyle:
            [TTBlendStyle styleWithBlend:kCGBlendModeSourceAtop next:
            [TTSolidFillStyle styleWithColor:RGBACOLOR(0,0,0,0.5) next:nil]]];
      }

  return style;
}

...и это обновленная версия...

- (TTStyle*)favoriteLauncherButtonImage:(UIControlState)state {

    TTStyle* style =
    [TTShapeStyle styleWithShape:[TTRoundedRectangleShape
                                  shapeWithRadius:4.0] next:
     [TTBoxStyle styleWithMargin:UIEdgeInsetsMake(0, 0, 0, 0)
                         padding:UIEdgeInsetsMake(16, 16, 16, 16)
                         minSize:CGSizeMake(0, 0)
                        position:TTPositionStatic next:
      [TTImageStyle styleWithImageURL:nil defaultImage:nil contentMode:UIViewContentModeScaleAspectFit
                                 size:CGSizeMake(64, 64) next: nil
       ]]];

    if (state == UIControlStateHighlighted || state == UIControlStateSelected) {
        [style addStyle:
         [TTBlendStyle styleWithBlend:kCGBlendModeSourceAtop next:
          [TTSolidFillStyle styleWithColor:RGBACOLOR(0,0,0,0.5) next:nil]]];
    }

    return style;
}

Там, вероятно, есть вещи, которые вам не нужны, например, закругленные углы изображения. Рабочая часть — это директива TTImageStyle, которая фиксирует размер изображения до 64x64. Надеюсь это поможет.

person Kirby Todd    schedule 22.03.2011

Я использую TLauncherView от Three20.

Вместо этого попробуйте использовать SDWebImage:

https://github.com/rs/SDWebImage

Вы можете просто выполнить две загрузки в UIImageView, одну для изображения с высоким разрешением и одну для изображения с низким разрешением. Низкое разрешение должно закончиться первым...

person Kendall Helmstetter Gelner    schedule 21.03.2011
comment
Спасибо за это, проблема не в загрузке/кешировании изображений. Дело в том, что TTLauncherView не имеет средства для загрузки изображений с высоким разрешением, насколько я знаю? - person fulvio; 21.03.2011
comment
Сам факт, что вы используете ThreeTwenty, по своей сути является проблемой, если вы даже рассматриваете возможность внесения в него изменений, это означает, что вам нужно перейти на что-то другое, даже если вам придется изменить его, чтобы делать то, что вы хотите. ThreeTwenty был самым первым фреймворком, написанным не очень хорошо, и большинство его аспектов были заменены лучшими фреймворками, чтобы продолжить с того места, где они остановились. - person Kendall Helmstetter Gelner; 21.03.2011
comment
Извините, не понял, что вы имели в виду под последним вопросом. Как я обычно использую SDWebImage, это локальный заполнитель и URL-адрес, который загружает в фоновом режиме изображение с высоким разрешением. У меня обычно для UIImageView установлено значение scaleAspectFit, поэтому, если изображение больше, оно будет хорошо выглядеть как на дисплеях Retina, так и на дисплеях без сетчатки (и iPad действует как сетчатка для запуска приложений iPhone в 2-кратном размере) - person Kendall Helmstetter Gelner; 21.03.2011
comment
Хорошо, тогда это не совсем связано с тем, что я пытаюсь сделать с TTLauncherView. Однако оцените вашу помощь. - person fulvio; 21.03.2011