UIImageView裁剪在设备上显示错误

时间:2012-08-21 22:23:44

标签: objective-c ios xcode uiimageview uiimage

我有一个图像,我正在裁剪它的一部分。问题是在模拟器中它正确显示,但在设备上它更加放大。这是相当不同的。我究竟做错了什么? (第一张图片来自模拟器,第二张图片来自iphone设备)

// create bounds and initialise default image 
CGRect imageSizeRectangle = CGRectMake(0, 0, 300, 300);
UIImage *df_Image =  [UIImage imageNamed:@"no_selection.png"];
self.imageView = [[UIImageView alloc] initWithFrame:imageSizeRectangle];
[imageView setImage:df_Image];
[self.view addSubview:imageView];

//crop image 
CGRect test = CGRectMake(0, 0, 150,150);
CGImageRef imageRef = CGImageCreateWithImageInRect([photo.image CGImage], test);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef);

This is how it is displayed on the simulator (correctly)

How it looks on the device

2 个答案:

答案 0 :(得分:1)

这里的问题是视网膜设备的尺寸是普通设备的2倍。您可以使用以下方法检查设备是否是视网膜;

+(BOOL)iPhoneRetina{
return ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))?1:0;
}

根据返回的BOOL值增加/减小rect的大小。

注意* displayLinkWithTarget:selector:只是一种随机方法,适用于iOS 4.0+但不适用于以前的版本。你不需要太在意它。

编辑*

CGRect rect;
if([self iPhoneRetina]){rect = CGRectMake(0,0,300,300);}//Retina
else{rect = CGRectMake(0,0,150,150);}//Non retina

//Then the rest of your code

答案 1 :(得分:1)

如果您想简化代码,可以使用

CGRectMake(0,0,[UIScreen mainScreen].scale*150,[UIScreen mainScreen].scale*150)