Перехід від використання 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
}