Почему мой программно созданный скриншот выглядит так плохо на iOS 7?

Я пытаюсь реализовать приложение совместного доступа с facebook. Я использовал этот код, чтобы сделать снимок экрана:

CGSize imageSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height); UIGraphicsBeginImageContext(imageSize); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

Он отлично работает на iOS 6, но в iOS 7 изображение выглядит очень плохо. Я использовал этот ответ: iOS: какой самый быстрый, самый эффективный способ сделать скриншот программным путем? для попытки исправить это, и это помогло, но скриншот выглядит плохо. Экран получает другой цвет, а некоторые объекты (например, метки) не отображаются на изображении. Любая помощь?

—-Обновить—-

Мне удалось решить большинство объектов, изменив их, чтобы сохранить вместо слабых. Моя главная проблема осталась моей таблицей, показанной как большой белый блок (он должен быть прозрачным, с ярлыками с белым текстом, поэтому все, что мы видим, это белые клетки). Я попытался определить фон таблицы как clearcolor, а не помогает.

—-Последнее обновление—

Здесь есть замечательные ответы, которые не касаются моей проблемы. Я хотел, чтобы он работал на устройстве, работающем с iOS7, но без использования iOS7 SDK, так как при этом требуется много усилий для переключения SDK проекта в этот момент, когда проект почти завершен.

Во всяком случае, я добавил мир кода, который окончательно решил мою проблему:

Это изменение просто решает проблему:

 UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f); 

вместо:

 UIGraphicsBeginImageContext(imageSize); 

5 Solutions collect form web for “Почему мой программно созданный скриншот выглядит так плохо на iOS 7?”

Новый API был добавлен с iOS 7, который должен обеспечить эффективный способ получения моментального снимка

  • snapshotViewAfterScreenUpdates: отображает представление в UIView с неизменяемым content

  • resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets : то же самое, но с изменяемыми размерами вставками

  • drawViewHierarchyInRect:afterScreenUpdates: же самое, если вам нужно, чтобы все подзаголовки тоже рисовались (например, метки, кнопки …)

Вы можете использовать UIView возвращенный для любого эффекта пользовательского интерфейса, или визуализировать изображение, подобное тому, которое вы делали, если вам нужно экспортировать.

Я не знаю, насколько хорошо этот новый метод выполняет VS, который вы предоставили (хотя я помню, что инженеры Apple говорили, что этот новый API был более эффективным)

вы можете попробовать это

 - (UIImage *) screenshot { UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale); [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 

в iOS 8 : вот как я делаю, чтобы получить ScreenShot

  1. просто добавили один UIImageView и метод для снятия скриншотов в файле .h

@property (слабый, неатомный) IBOutlet UIImageView * imageView;

  -(IBAction)takeSnapShot:(id)sender; 

2 добавлен снимок кода для снятия снимка экрана и установлен на UIImageView в формате .m

 - (IBAction)takeSnapShot:(id)sender { UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *snapShotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); imageView.image = snapShotImage; } 
  1. ниже – результат, который я получил.

введите описание изображения здесь

На iOS7 у вас могут быть сбои, если вы используете

 [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES] 

во время текущей анимации. Установите afterScreenUpdates = NO чтобы избавиться от сбоев.

Убедитесь, что для opaque установлено значение NO

  • NSUserDefaults, написанные в -applicationWillTerminate: не вступают в силу; Зачем?
  • Как объединить UIImage и UILabel в одно изображение и сохранить
  • Создатель клиента SOAP для Objective-C из WSDL?
  • Редактировать RTF / DOC файл программно в xcode / ios
  • Ссылка на внешнюю документацию по URL из комментариев в Objective-C от doxygen
  • sqlite 3 вступительный выпуск
  • Классы SDK GoogleMaps не объявленного типа или неразрешенный идентификатор
  • Подписание приложения iPhone: действительный идентификатор подписи, соответствующий этому профилю, не найден в вашей цепочке ключей
  • Как узнать цвет RGB моего объекта в раскадровке
  • Случайное удаление рамок iOS
  • Распространение бета-версии Crashlytics / Fabric с Xcode 8
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.