Переключитесь с использования UIGraphicsBeginImageContext
на UIGraphicsBeginImageContextWithOptions
(как описано на этой странице ). Передайте 0.0 для масштаба (третий аргумент), и вы получите контекст с масштабным коэффициентом, равным коэффициенту экрана.
UIGraphicsBeginImageContext
использует фиксированный масштабный коэффициент 1,0, поэтому на iPhone 4 вы получаете точно такое же изображение, что и на других iPhone. Могу поспорить, что либо iPhone 4 применяет фильтр, когда вы неявно увеличиваете его, либо ваш мозг замечает, что он менее резкий, чем все вокруг.
Так что я думаю:
#import <QuartzCore/QuartzCore.h>
+ (UIImage *)imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
И в Swift 4:
func image(with view: UIView) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
defer { UIGraphicsEndImageContext() }
if let context = UIGraphicsGetCurrentContext() {
view.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
return image
}
return nil
}