ios - 使用一组图像制作动画时,我应该考虑 iPad 4 的哪些限制?

标签 ios ipad animation uiimageview

这是我正在尝试做的事情:我想要一个显示全屏图像并通过滑动 UISlider 使该图像具有动画效果的应用程序。不断变化的 slider 值将通过创建动画的数组图像进行排序。此动画是转盘上的单个字符。当 slider 改变值时,角色看起来好像在围绕转盘旋转。

此项目是 3D 艺术家的作品集。艺术家给了我一系列 180 张以全屏视网膜分辨率渲染的角色图像。他还提供了另外 180 张以非视网膜全屏分辨率呈现的图像。这个想法是,当有人在视网膜 iPad 上从任何角度观看他的角色时,他们可以使用 UISwitch 在视网膜和非视网膜显示器之间切换。下面发布的代码在模拟器上运行良好。

然而,当在 iPad 4 上运行这段代码时,它运行了一段时间,然后我收到内存警告。然后它崩溃了。我假设以有人想要移动 slider 的速度显示那么多大小的图像,这对于 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

最佳答案

不是一次将所有 180 个图像加载到一个数组中,您不能实例化当前图像以在 slider 的连续 UIContolEventValueChanged 事件期间显示吗?

创建 slider

UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 155, 20)];
slider.continuous = YES;
slider.value = 0.0f;
slider.minimumValue = 0.0f;
slider.minimumValue = 179.0f;
[slider addTarget:self action:@selector(handleContinuousSlider:) forControlEvents:UIControlEventValueChanged];

处理它的持续变化事件

- (void)handleContinuousSlider:(UISlider *)slider {
    //create a UIImage with file name that makes the current integer value of the slider
    NSString *myImageString = [[NSString alloc] initWithFormat:@"HyperReal_%i.png", slider.value];
    UIImage *myImageGraphic = [UIImage imageNamed:myImageString];

   //I assume this is a UIImageView
   [_imageDisplay setImage:myImageGraphic];

   [myImageGraphic release];
}

关于ios - 使用一组图像制作动画时,我应该考虑 iPad 4 的哪些限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366451/

相关文章:

ios - 如何在 WebView 中显示下载的文件?

iphone - 如何在iPhone的MKMapView中添加UIImage?

ios - 为什么在 iOS 8 中我的应用程序在启动时采用了错误的方向?

html - CSS 动画加载器在 IE 11 中只能正常工作一次

ios - 如何在 flutter 中的圆角容器上添加彩色底部边框?

ios - 在 UIImageView 中更新图像时,UIImage 分配不会 swift 发生

Swift 框架在模拟器上加载到 Objective C 应用程序中,但不在设备上加载

css - 使用 css3 动画半圆规

javascript - 如何只在第一次显示动画 html css

ios - PassKit 不可预测的崩溃