【发布时间】:2012-09-30 23:32:45
【问题描述】:
我正在尝试为一些图像制作动画。这些图像在非视网膜 iPad 上运行良好,但它们的视网膜对应物很慢,并且动画不会以指定的速率循环播放。我正在使用的代码如下所示,该方法每 1/25 秒调用一次。这种方法似乎比UIViewAnimations 执行得更好。
if (counter < 285) {
NSString *file = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Animation HD1.2 png sequence/file_HD1.2_%d", counter] ofType:@"png"];
@autoreleasepool {
UIImage *someImage = [UIImage imageWithContentsOfFile:file];
falling.image = someImage;
}
counter ++;
} else {
NSLog(@"Timer invalidated");
[timer invalidate];
timer = nil;
counter = 1;
}
}
我意识到有很多图像,但帧数较少的动画的性能是相同的。就像我说的,非视网膜动画效果很好。上面的每张图片大约是 90KB。我做错了什么还是这仅仅是 iPad 的限制?老实说,当它可以处理复杂的 3D 游戏之类的东西时,我很难相信它无法处理这样的事情,所以我想我做错了什么。任何帮助将不胜感激。
编辑 1:
从下面的答案中,我编辑了我的代码,但无济于事。执行以下代码会导致设备崩溃。
在viewDidLoad
NSString *fileName;
myArray = [[NSMutableArray alloc] init];
for(int i = 1; i < 285; i++) {
fileName = [NSString stringWithFormat:@"Animation HD1.2 png sequence/HD1.2_%d.png", i];
[myArray addObject:[UIImage imageNamed:fileName]];
NSLog(@"Loaded image: %d", i);
}
falling.userInteractionEnabled = NO;
falling.animationImages = humptyArray;
falling.animationDuration = 11.3;
falling.animationRepeatCount = 1;
falling.contentMode = UIViewContentModeCenter;
动画方法
-(void) triggerAnimation {
[falling startAnimating];
}
【问题讨论】:
-
如果您将所有 UIImage 对象预加载到一个数组中,而不是在制作动画时按需加载它们会怎样?
-
我想我已经尝试过了,但现在让我试一试,我会回来的......
-
@FogleBird 所以我试过了。我在
viewDidLoad中加载了一个包含 280 个图像的数组。效果很好。但是当我使用[falling StartAnimating]执行动画时,大约 7 秒内没有任何反应,然后应用程序崩溃。当我在模拟器中运行应用程序时,大约有 3 秒的延迟,然后动画开始。 -
这些图像在 2 倍分辨率下的尺寸是多少?
-
@bbodayle 每个 2x 图像大约 90KB,每个尺寸为 1131 x 1106。所以 Interface Builder 中的
UIImageView为 566 x 553。
标签: objective-c ios ipad