0

我有一张图片,我正在裁剪其中的一部分。问题是在模拟器中它显示正确,但在设备上它被放大了很多。这有很大的不同。我究竟做错了什么?(第一张图片来自模拟器,第二张来自 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);

这就是它在模拟器上的显示方式(正确)

它在设备上的外观

4

2 回答 2

1

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

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

BOOL并根据返回的值增加/减少矩形的大小。

Note*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
于 2012-08-21T23:00:52.880 回答
1

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

CGRectMake(0,0,[UIScreen mainScreen].scale*150,[UIScreen mainScreen].scale*150)
于 2012-08-22T07:32:16.360 回答