【问题标题】:UIImageView cropped being displayed wrong on deviceUIImageView 裁剪在设备上显示错误
【发布时间】:2012-08-21 22:23:43
【问题描述】:

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

【问题讨论】:

  • 你的iPhone模拟器设置为iPhone (Retina)了吗?你可以签到Hardware->Device
  • 刚刚检查过,没有,它是在 iphone 上设置的
  • 您是在 iPhone 4/4S 上进行测试吗?如果是这样,请将您的模拟器设置为视网膜,看看它们的行为是否不同。
  • 刚刚检查过,如果我在 iphone 模拟器上打开视网膜显示,我会得到与我的设备上相同的结果。是否可以关闭 iPhone 上的视网膜显示?或者我该如何解决这个问题?
  • 我发布了一个答案,希望它会有所帮助。

标签: objective-c ios xcode uiimageview uiimage


【解决方案1】:

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

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

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

注意* 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

【讨论】:

  • 谢谢,但是我应该把methon放在哪里呢?我假设应用程序委托,我只是将其调用为 false,因此它将视网膜设置为 false?
  • 你不能“关闭”视网膜显示,这个方法只是检查它是否是视网膜,然后你必须使用 2x 大小或正常大小。
  • 我明白了,一般解决方法是什么?我是否只需将图像缩小 1/2 以便它们在我的设备上正确显示?
  • 试试我的更新,它应该每次都返回相同的图像,除了大小会不同。
  • 得到号码CGFloat scale = [[UIScreen mainScreen] respondsToSelector:@selector(scale)]?[[UIScreen mainScreen] scale]:1.0;然后乘以rect = CGRectMake(0,0,150*scale,150*scale);不是更好吗?这样,您仍然可以正确裁剪 1.0 和 2.0 以外的比例。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2016-02-06
    • 2018-09-19
    • 1970-01-01
    相关资源
    最近更新 更多