MKMapView renderInContext - проблема iPhone 4 (Retina)
У меня есть MKMapView размером 64x64. Я создаю изображение из вида карты, используя метод 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)? Как это исправить?
Ответы
Ответ 1
Как уже упоминалось в предыдущем ответе который я дал:
Используйте UIGraphicsBeginImageContextWithOptions
вместо UIGraphicsBeginImageContext
:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(64, 64), NO, 0.0);
Подробнее см. QA1703. В нем говорится:
Примечание. Начиная с iOS 4, UIGraphicsBeginImageContextWithOptions позволяет обеспечить масштаб фактор. Масштабный коэффициент нуля устанавливает его к масштабному коэффициенту устройства главный экран. Это позволяет вам получить самое резкое, самое высокое разрешение моментальный снимок дисплея, включая Отображение сетчатки.
Ответ 2
Не могли бы вы предоставить примерный код (потому что мне действительно интересно, как вы это сделали, на самом деле это новое для меня ^^)
И то, что я сделал в сопоставимой ситуации, я создаю изображение с удвоенным размером, а затем автоматически уменьшаю его на UIImageView
(устанавливая свойства изменения размера для всех границ)
EDIT:, но я думаю, что он должен сделать ScaleToFill
автоматически
UIGraphicsBeginImageContext(CGSizeMake(128, 128));
…
myImageView.frame = CGRectMake(0, 0, 64, 64);
myImageView.contentMode = UIViewContentModeScaleToFill;