MKMapView renderInContext - iPhone 4(Retina)问题

时间:2011-01-05 11:18:05

标签: iphone objective-c ios

我有一个大小为64x64的MKMapView。我正在使用'renderInContext:'方法从地图视图创建图像。并将图像分配给UITableViewCell的imageView。在普通的iPhone中,它显示图像正确。但在iPhone(Retina)中它显示的图像模糊不清。我在模拟器中测试这个,而不是在实际设备中。我已经附上了下面的屏幕截图。

alt text

左侧的缩略图,带圆角,是UITableViewCell的imageView。右侧的缩略图是MKMapView。

我使用以下代码从地图视图中获取图像。

UIGraphicsBeginImageContext(CGSizeMake(64, 64));
CGContextRef context = UIGraphicsGetCurrentContext();
[[mapView layer] renderInContext:context];
thumbnail_image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

为什么会在iPhone(Retina)中发生这种情况?如何解决这个问题?

2 个答案:

答案 0 :(得分:23)

正如previous answer I gave中已经提到的那样:

使用UIGraphicsBeginImageContextWithOptions代替UIGraphicsBeginImageContext

UIGraphicsBeginImageContextWithOptions(CGSizeMake(64, 64), NO, 0.0);

有关详细信息,请参阅QA1703。它说:

  

注意:从iOS 4开始,   UIGraphicsBeginImageContextWithOptions   允许您提供比例   因子。比例因子为零设定它   到设备的比例因子   主屏幕。这使您可以获得   最尖锐,最高度的重新燃烧   显示的快照,包括一个   Retina Display。

答案 1 :(得分:1)

请你提供一些示例代码(因为我真的很感兴趣你是怎么做的,事实上它对我来说是新的^^)
我在类似的情况下做了什么,我创建了一个双倍大小的图像,然后让它自动缩小UIImageView(设置调整大小属性以适应所有边框)

编辑,但我认为它应该自动生成ScaleToFill

UIGraphicsBeginImageContext(CGSizeMake(128, 128));    
…
myImageView.frame = CGRectMake(0, 0, 64, 64);
myImageView.contentMode = UIViewContentModeScaleToFill;