2009-07-05 3 views
2

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

Что я пытаюсь сделать, это сохранить карту всех UIImages - каждый из них уникален и переназначить каждый из них в несколько UIImageViews по требованию от игрового движка. По ходу игры я удаляю некоторые UIImageViews с дисплея, а позже может использовать их с разными предустановленными UIImages.

В первый раз я создаю UIImageView я сделать что-то вроде:

m_ImageView = [[UIImageView Alloc] initWithImage: initialImg];

[m_ParentView addSubview: m_ImageView];

И следующие раз я просто переключить изображение:

[m_ImageView.image релиз];

[m_ImageView setImage otherSavedImg];

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

Спасибо,

ответ

3

Документов для UIImageView сказать «Этот метод регулирует рамку приемника в соответствии с размером указанного изображения.» Когда вы вызываете «setImage:», вы используете простой установщик свойств. Никакого дополнительного пересчета не производится. Если вам нужно скорректировать размер кадра UIImageView, вам придется сделать это вручную.

Судя по контексту, который вы дали, похоже, что это будет нечто, что вы будете делать несколько чаще. Таким образом, я рекомендую создать категорию для UIImageView:

UIImageView + Resizing.h:

@interface UIImageView (Resizing) 

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize; 

@end 

UIImageView + Resizing.m:

@implementation UIImageView (Resizing) 

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize { 
    [self setImage:newImage]; 
    if (shouldResize == YES) { 
    [self sizeToFit]; 
    } 
} 

@end 

Теперь, когда вам нужно изменить изображение и изменить размер ImageView, просто #import UIImageView + Resizing.h и использование:

[myImageView setImage:anImage resize:YES]; 
+0

Эй Дэйв, Спасибо за ответ, прочитав его, я вернулся и прочитал фронт документа UIImageView назад, и они действительно упоминают что-то вроде этого: > Настройка свойства изображения не изменяет размер UIImageView. Вызовите sizeToFit, чтобы настроить размер представления в соответствии с изображением. Очень странно, что они не делают этого с набором UIImage, но эй, ты спас меня в день. -Adi – Adi

+0

Ха, я забыл о методе sizeToFit! Хорошая находка. Тем не менее, я бы порекомендовал создать категорию для установки изображения и sizeToFit, чтобы он разлагал * ваш * код. –

+0

Я вернулся и изменил ответ на использование «sizeToFit». знак равно –

Смежные вопросы