这就是我想要做的事情:我想要一个显示全屏图像的应用程序,并通过滑动 UISlider 使该图像动画化。不断变化的滑块值将通过创建动画的数组的图像进行排序。该动画是转台上的单个角色。当滑块更改值时,角色看起来好像正在围绕转盘旋转。
该项目是 3D 艺术家的作品集。艺术家给了我一系列 180 张以全屏视网膜分辨率渲染的角色图像。他还额外提供了 180 张以非视网膜全屏分辨率渲染的图像。这个想法是,当有人在视网膜 iPad 上从任何角度观看他的角色时,他们可以使用 UISwitch 在视网膜和非视网膜显示之间切换。下面发布的代码在模拟器上运行良好。
但是,在 iPad 4 上运行此代码时,它会运行一段时间,然后我会收到内存警告。然后它崩溃了。我假设有那么多这样大小的图像显示得和有人想要移动滑块一样快,这对于 iPad 4 来说太多了。
我很好奇在使用这样的图像时应该考虑哪些限制。180张图片太多了吗?什么是合理的金额?有没有更有效的方法来产生我想要的结果?我没有采用猜测和检查多少图像不会导致崩溃的方法,而是认为有人可能对我的问题有一些有用的见解。
@implementation RBViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_imageDisplay.image = [UIImage imageNamed:@"HyperReal_0.png"];
_arrayRetina = [[NSMutableArray alloc] initWithCapacity:180];
_arrayNormal = [[NSMutableArray alloc] initWithCapacity:180];
for(int i = 0; i < 179; i++)
{
NSString *myImageString = [[NSString alloc] initWithFormat:@"HyperReal_%i.png", i];
UIImage *myImageGraphic = [UIImage imageNamed:myImageString];
[_arrayRetina addObject:myImageGraphic];
}
for(int i = 0; i < 179; i++)
{
NSString *myImageString = [[NSString alloc] initWithFormat:@"lameHyperReal_%i.png", i];
UIImage *myImageGraphic = [UIImage imageNamed:myImageString];
[_arrayNormal addObject:myImageGraphic];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)switchButton:(id)sender {
if (_switchOnForRetina.isOn == YES)
{
_imageDisplay.image = [_arrayRetina objectAtIndex:_sliderBar.value];
}
else
_imageDisplay.image = [_arrayNormal objectAtIndex:_sliderBar.value];
}
- (IBAction)changeSlider:(id)sender {
if (_switchOnForRetina.isOn == YES)
{
_imageDisplay.image = [_arrayRetina objectAtIndex:_sliderBar.value];
}
else
_imageDisplay.image = [_arrayNormal objectAtIndex:_sliderBar.value];
}
@end