0

假设有尺寸为 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); 

方法有问题吗?

4

1 回答 1

1

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

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

因此,如果您希望您的 cool.png 在所有设备上以 100x50 点显示,那么您可以简单地将框架设置为 100x50,将图像设置为 cool.png,然后将 imgView.contentView 设置为 UIViewContentModeScaleAspectFit... 这将重新缩放200x100 图像以适合其非视网膜设备...然后,如果它是视网膜设备,它将处于全分辨率(200x100)但在 100x50 点...

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

于 2012-05-15T21:07:29.730 回答