假设有尺寸为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);
这种方法有什么问题吗?
答案 0 :(得分:1)
你在这里采取了错误的做法..
CGRect,Point和Size不是以像素为单位测量的..它们是点。点是iOS坐标系,将被缩放到设备......例如,如果你将UIView设为320点宽,那么它将会在视网膜iPhone或iPad上填充宽度......
所以如果你想让你的cool.png在所有设备上以100x50点显示,那么你可以简单地将帧设置为100x50,将图像设置为cool.png然后将imgView.contentView设置为UIViewContentModeScaleAspectFit ...这将然后将200x100图像重新缩放以适应其非视网膜设备...然后,如果它是视网膜设备,它将是全分辨率(200x100),但是在100x50点...
然而,@ 2x系统的制作是因为必须缩小图像会增加加载时间,因为它必须缩放,但如果你不能使用@ 2x图像,那么你仍然可以执行上述操作