Я думаю, вам нужно захватить UIView/UIWindow в резолюции сетчатке (960x640 или 2048x1536) Использование UIGraphicsBeginImageContextWithOptions и установить его масштаб параметр 0.0f делает захват в родном разрешении (сетчатка для iPhone 4 и выше или IPad 3).
Этот код захватить ваш UIView в родном разрешении
CGRect rect = [captureView bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[captureView.layer renderInContext:context];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Это один делает то же самое на весь экран (главное окно),
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
CGRect rect = [keyWindow bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[keyWindow.layer renderInContext:context];
UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Это экономит UIImage в формате JPG с качеством 95% в папка документа приложения
NSString *imagePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/capturedImage.jpg"]];
[UIImageJPEGRepresentation(capturedImage, 0.95) writeToFile:imagePath atomically:YES];
вы можете попробовать с этим также UIGraphicsBeginImageContextWithOptions (view.bounds.size, view.opaque, 0.0); –
спасибо, но ничего не изменилось! –
Когда вы говорите «низкое качество», что именно вы имеете в виду? Изображение не похоже на то, что на экране? Используете ли вы экран сетчатки, но захваченное изображение не такое резкое? Является ли изображение зернистым или искаженным? Что в этом плохого? – TigerCoding