我正在尝试手动强制iOS加载2x版本的文件图像文件。我这样做是为了节省资源 - 我需要iPhone版本的图形,我想以1:1的比例使用iPad版本。
要做到这一点,我不能使用initWithContentsOfFile,因为即使我在文件名中添加x2,iOS也会提供x1版本。相反,我使用此代码:
NSString *filename = [myImage filenameWithSuffix:@"@2x"];
UIImage *image = [[UIImage alloc] initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:filename]] CGImage]
scale:1.0
orientation:UIImageOrientationUp];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
有效。我100%肯定它正在拿起x2版本(我改变了图形以确保)。
然而,当它显示在屏幕上时,如果尺寸正确,则模糊不清。事实上,它看起来像x1版本高达200%,因此iOS对我的形象做了一些奇怪的事情。
我确保在像素边界上绘制图像。
更新:
即使我创建了另一个没有x2后缀的图像文件并使用initWithContentsOfFile加载它,它仍然模糊不清。所以这与它的加载方式无关。
除像素不对中外,什么会导致图像质量下降?
请注意,我已经截取屏幕截图并将图像与Photoshop中的原始图像进行比较。它的大小完全相同,因此缩放不是问题。
答案 0 :(得分:1)
这只是在黑暗中拍摄,但尝试将init方法的比例更改为2。
NSString *filename = [myImage filenameWithSuffix:@"@2x"];
UIImage *image = [[UIImage alloc] initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:filename]] CGImage]
scale:2.0
orientation:UIImageOrientationUp];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
我可以使用以下功能在iPad上加载@ 2x图像:
UIImage *image = [UIImage imageNamed:@"fileName@2x"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[imageView sizeToFit];
[self.view addSubview:imageView];
(因为我使用imageNamed
,图像是.png,我没有将.png附加到文件名,因为它是由方法假设的)
答案 1 :(得分:1)
我已经解决了这个问题,我很尴尬地说它是由于像素对齐造成的。
我发现iOS模拟器可以突出显示未对齐的图像,这证明图像确实未对齐。然后,我从图像向上记录每个视图的位置,以便找到导致问题的那个视图。这个片段多次证明了它的重量:
NSLog(@"View details");
UIView *view = theImageView;
while (view)
{
NSLog(@"%@", view);
view = [view superview];
}