相同的图像,但在模拟器和设备,AFNetWorking中安装应用程序时获得不同的大小

时间:2013-02-28 16:28:23

标签: objective-c uiimageview afnetworking

我这样做是为了确定块中下载图像的大小,然后我会相应地设置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}

为什么会这样。

2 个答案:

答案 0 :(得分:1)

因为您正在下载的图像未被识别为“视网膜”图像,因此在视网膜设备上,它将显示为实际像素的一半大小。您可以通过读取文件名为“filenam@2x.jpg”的图像将图像指定为视网膜,或者您可以在创建时将UIImage的“比例”值指定为1.0(非视网膜)或2.0(视网膜)< / p>

[UIImage imageWithData:scale:]
[UIImage imageWithCGImage:scale:orientation:]

如果您没有提供比例值,则假设图像是您发现的适当分辨率。

答案 1 :(得分:0)

原因是UIImage大小,因为iOS4,返回的点不是像素。在视网膜显示屏上显示您所看到的结果。来自Apple Docs:

  

尺寸

     

图像的尺寸,考虑了方向。

     

@property(非原子,只读)CGSize大小

     

讨论在iOS 4.0及更高版本中,此值反映逻辑大小   图像并以点为单位进行测量。在iOS 3.x及更早版本中,这个   值始终反映以像素为单位测量的图像尺寸。