2

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

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

第一次创建 UIImageView 时,我会执行以下操作:

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

[m_ParentView addSubview: m_ImageView];

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

[m_ImageView.image 发布];

[m_ImageView setImage otherSavedImg];

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

谢谢,

4

1 回答 1

3

UIImageView 的文档说“此方法调整接收器的框架以匹配指定图像的大小。” 调用“setImage:”时,您使用的是简单的属性设置器。没有进行额外的重新计算。如果您需要重新调整 UIImageView 框架的大小,则必须手动进行。

从您提供的上下文来看,这似乎是您会经常做的事情。因此,我建议为 UIImageView 创建一个类别:

UIImageView+调整大小.h:

@interface UIImageView (Resizing)

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

@end

UIImageView+调整大小.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];
于 2009-07-05T04:26:24.223 回答