UIImageView的多个图像设置

时间:2009-07-05 04:17:38

标签: iphone uiimageview uiimage

最近,我一直试图通过使用已经分配的UIImageViews和UIImages来最小化分配和重复资源作为图像所花费的时间来节省渲染时间。

我尝试做的是维护所有UIImages的地图 - 每个UIImages都是唯一的,并根据游戏引擎的需求将每个UIImage重新分配给几个UIImageViews。 随着游戏的进行,我从显示中删除了一些UIImageViews,后来可能会在不同的预装UIImages中重复使用它们。

我第一次创建UIImageView时,我做了类似的事情:

  

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

     

[m_ParentView addSubview:m_ImageView];

以下时间我只需切换图像:

  

[m_ImageView.image release];

     

[m_ImageView setImage otherSavedImg];

问题是切换后,显示的新图像尺寸与初始图像尺寸相同。 我通过每次重新创建UIImageView来绕过这个问题(这似乎是浪费时间),但我想知道为什么会发生这种情况以及如何防止它。

谢谢,

1 个答案:

答案 0 :(得分: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];