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