将imageNamed转换为imageWithContentsOfFile:

我的代码为我的图像是

-(IBAction)start:(id)sender { animation.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"Paddle 1.png"], [UIImage imageNamed:@"Paddle 2.png"], [UIImage imageNamed:@"Paddle 3.png"], [UIImage imageNamed:@"Paddle 4.png"], nil]; [animation setAnimationRepeatCount:0]; animation.animationDuration = 2.5; [animation startAnimating]; } 

这是caching太多的内存,我在前面的问题被告知交换我的代码使用

 [UIImage imageWithContentsOfFile: GetImgWithoutCaching(@"Paddle 1.jpg")] 

 UIImage* GetImgWithoutCaching(NSString* imgName) { NSString *imagePath = [[NSBundle mainBundle] pathForResource:imgName ofType:nil]; return [UIImage imageWithContentsOfFile:imagePath]; } 

编写代码的正确方法是什么? 我是否将该代码放在我的.m中?

首先,你应该检查是否使用视网膜图片:

 BOOL isHighResolution = NO; if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { if ([UIScreen mainScreen].scale > 1) { isHighResolution = YES; } } 

如果您使用的是视网膜图片,请将@ 2x添加到图片名称,如下所示:

 NSString *noExtFileName = [name stringByDeletingPathExtension]; if (isHighResolution) { if (![noExtFileName hasSuffix:@"@2x"]) { noExtFileName = [noExtFileName stringByAppendingString:@"@2x"]; } } //if image only "png" type return [[NSBundle mainBundle] pathForResource:noExtFileName ofType:@"png"]; 

由于您的GetImgWithoutCaching函数返回一个UIImage,您将需要:

 -(IBAction)start:(id)sender { animation.animationImages = [NSArray arrayWithObjects: GetImgWithoutCaching(@"Paddle 1.jpg"), GetImgWithoutCaching(@"Paddle 2.jpg"), GetImgWithoutCaching(@"Paddle 3.jpg"), GetImgWithoutCaching(@"Paddle 4.jpg"), nil]; [animation setAnimationRepeatCount:0]; animation.animationDuration = 2.5; [animation startAnimating]; }