我正在使用 Xcode 4.5.2,该应用程序的目标是 iOS 6.0。在我的应用程序中,我无法显示 iPad Retina 图像。我知道我必须使用 @2x~ipad.png 扩展名才能让它们正确显示,我这样做了。我的图像是根据命名的,因此除了每个设备的扩展名之外,它们的名称都相同。这是我命名它的方式。
然而,
NSString *name=@"appearanceConnection.png";
//NSString *name=@"appearanceConnection"; //I did check this
//I did check the target
UIImage *image = [UIImage imageNamed:name];
NSLog(@"%f",image.size.width);
显示@1x 图像的宽度。
如果我尝试手动设置正确的图像名称:
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
([UIScreen mainScreen].scale == 2.0)) {
// Retina display
name=@"appearanceConnection@2x~ipad.png";
NSLog(@"retina");
}
else
{
name=@"appearanceConnection.png";
NSLog(@"non-retina");
}
UIImage *image = [UIImage imageNamed:name];
NSLog(@"%f",image.size.width);
选择正确的@2x,然后在我将其添加到视图时将其缩放 2.0。
我多次清理/重建我的项目,我重置了 IOS 模拟器设置,没有结果。
我究竟做错了什么?
更新:
非视网膜
视网膜:
NSLog(@"%f", image.scale)
afterimageNamed
方法给了我 1.0
更新 2: 我正在尝试优化我的动画外观,所以我想加载一张大图像并按帧剪切。首先,我加载大图像(@2x 或 1@x),然后使用循环
for (int i = 0; i<numberOfFrames; i++)
{
CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage,
CGRectMake(i*width, 0.0f, width, height));
UIImage *animationImage = [UIImage imageWithCGImage:imageRef];
if (isFlip)
{
[animationImages insertObject:animationImage atIndex:0];
}
else
{
[animationImages addObject:animationImage];
}
CGImageRelease(imageRef);
}
我剪切了这个大图像并创建了动画。如果是视网膜显示,则宽度和高度乘以 2。
也许这是一个警告?
UIImage *animationImage = [UIImage imageWithCGImage:imageRef];
返回我缩放两次的图像?
但是,如果我缩放 (0.5,0.5) UIImageView 这是由这个图像初始化它适合。知道为什么要缩放两次吗?