最近,我一直试图通过使用已经分配的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来绕过这个问题(这似乎是浪费时间),但我想知道为什么会发生这种情况以及如何防止它。
谢谢,
答案 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];