在UIImageView中使用一个图像png文件用于视网膜和普通屏幕

时间:2012-05-15 20:43:01

标签: ios uiimageview retina-display

假设有尺寸为200 X 100像素的cool.png文件,我想将它用于视网膜和普通设备。 我需要获得UIImageView 100 X 50点的大小。

我试图根据图像尺寸减小UIImageView的大小,在视觉上我看不出有没有使用和不使用缩放修改器@ 2x准备两个文件或使用UIImageView按contentMode属性缩放它没有任何区别。

BOOL retina = [[UIScreen mainScreen] scale] == 2.0 ? YES : NO;

UIImage *img = [UIImage imageNamed:@"cool.png"];

UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
imgView.contentMode = UIViewContentModeScaleToFill;

CGFloat width = img.size.width;
CGFloat height = img.size.height;

if (!retina) {
   width = width/2.0;
   height = height/2.0;     
}

imgView.frame = CGRectMake (somePoint.x, somePoint.y, width, height); 

这种方法有什么问题吗?

1 个答案:

答案 0 :(得分:1)

你在这里采取了错误的做法..

CGRect,Point和Size不是以像素为单位测量的..它们是点。点是iOS坐标系,将被缩放到设备......例如,如果你将UIView设为320点宽,那么它将会在视网膜iPhone或iPad上填充宽度......

所以如果你想让你的cool.png在所有设备上以100x50点显示,那么你可以简单地将帧设置为100x50,将图像设置为cool.png然后将imgView.contentView设置为UIViewContentModeScaleAspectFit ...这将然后将200x100图像重新缩放以适应其非视网膜设备...然后,如果它是视网膜设备,它将是全分辨率(200x100),但是在100x50点...

然而,@ 2x系统的制作是因为必须缩小图像会增加加载时间,因为它必须缩放,但如果你不能使用@ 2x图像,那么你仍然可以执行上述操作