在模拟器和设备中安装应用程序时,图像相同但大小不同,AFNetWorking
Posted
技术标签:
【中文标题】在模拟器和设备中安装应用程序时,图像相同但大小不同,AFNetWorking【英文标题】:same image but getting different size when installing the app in simulator and device,AFNetWorking 【发布时间】:2013-02-28 16:28:22 【问题描述】:我正在执行以下操作来确定块期间下载图像的大小,然后我将相应地设置 uiimageview 的大小。
self.headerView 是 xib 中 uiimageview 的出口连接
__weak UIImageView *weakObj = self.headerView;
[self.headerView setImageWithURLRequest:[NSMutableURLRequest requestWithURL:[NSURL URLWithString:fundraiserInfo.imageUrl]]
placeholderImage:nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
NSLog(@"image is %@",NSStringFromCGSize(image.size));
CGRect newFrame ;
newFrame = weakObj.frame;
newFrame.size.width = image.size.width;
newFrame.size.height = image.size.height;
weakObj.frame = newFrame;
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
;
];
但是,当在模拟器 (Device-Iphone) 上运行应用程序时,我得到了
image is 300, 222
但是,如果我使用模拟器 (Retina 3.5) 或 (Retina 4) 或者我在 iphone4 或 iphone 5 上安装应用程序,我会得到:
image is 150, 111
为什么会这样。
【问题讨论】:
【参考方案1】:这是因为您正在下载的图像未被识别为“视网膜”图像,因此在视网膜设备上,它将显示为实际像素大小的一半。您可以通过读取文件名为“filenam@2x.jpg”的图像将图像指定为视网膜,或者您可以在创建时将 UIImage 的“缩放”值指定为 1.0(非视网膜)或 2.0(视网膜)
[UIImage imageWithData:scale:]
[UIImage imageWithCGImage:scale:orientation:]
如果您不提供比例值,则假定图像是您发现的适当分辨率。
【讨论】:
我们如何将图像定义为视网膜图像。应该从服务器端还是移动端完成? 如果您想在视网膜和非视网膜设备上都有清晰的图像,您的服务器应该根据请求中提供的参数返回视网膜和非视网膜图像。【参考方案2】:原因是 UIImage 大小,从 ios4 开始,返回的是点而不是像素。视网膜显示器上的哪个提供了您所看到的结果。来自 Apple 文档:
大小
图像的尺寸,考虑到方向。
@property(nonatomic, readonly) CGSize 大小
讨论 在 iOS 4.0 及更高版本中,这个值反映了逻辑大小 图像的大小,以点为单位。在 iOS 3.x 及更早版本中,这 值始终反映以像素为单位测量的图像尺寸。
【讨论】:
以上是关于在模拟器和设备中安装应用程序时,图像相同但大小不同,AFNetWorking的主要内容,如果未能解决你的问题,请参考以下文章
如何获取点在UIImageView上的点的坐标,使它们在所有设备(不同大小/分辨率)上的相同位置?