目前我正在尝试在我的iPhone应用程序中显示一个简单的表格,其中我使用UITableViewCell的样式 UITableViewCellStyleValue1 (图像在左侧,详细标签右对齐)。单元格都具有默认高度(50.0f)。在我向单元格添加图像之前,我将图像的大小调整为40x40,这样它就不是单元格的总高度(我认为看起来很难看)。
我使用此代码执行此操作:
cell.imageView.image = [UIImage imageNamed:@"icon.png"];
cell.imageView.image = [RootViewController imageWithImage:cell.imageView.image scaledToSize:CGSizeMake(40, 40)];
这一切都非常好,并且完美无瑕。但我想在iPhone 4上实现这一点(具有更高分辨率的屏幕)。问题是,iPhone 4上的所有内容都没有问题,但图像看起来非常像素化。
原因在于屏幕上的所有内容都被夸大以扩展到新的分辨率,也就是图像,因此图像可能应该像80x80。但是当我将它们调整到80x80(原件是120x120)时,由于缩放的原因,它们看起来很大。
有没有办法让我的图像不是表格单元的完整高度,但我希望它们在iPhone 4上的分辨率更高。我应该为此创建一个全新的视图吗?
哎呀,在第一次回复后,我意识到我自己的书面功能缺失了:+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContextWithOptions(newSize, NO, [[UIScreen mainScreen] scale]);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
正如您所看到的,在第一次回复之后,我尝试使用方法 UIGraphicsBeginImageContextWithOptions ,但不知何故,这会导致空图像。
答案 0 :(得分:5)
我假设你写了“imageWithImage:scaledToSize:”,对吧?
我进一步假设您在此调用中使用“UIGraphicsBeginImageContext(yourSize)”。如果您的平台是iPhone 4,请将其替换为“UIGraphicsBeginImageContextWithOptions(yourSize,NO,2.0)”。
“2.0”定义点的比例因子(以点为单位定义大小而不是以像素为单位)。在视网膜前显示器上,一个点是1x1像素。在视网膜显示器上,一个点是2x2像素。
编辑: 确保您的资源中有一个名为“icon@2x.png”的高分辨率版本的“icon.png”。如果它是视网膜显示器,它会自动加载。