Почему мой программно созданный скриншот выглядит так плохо на 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

  • Импорт 3D-объекта с анимацией из scn
  • Кнопка «Отмена» вместо кнопки «Назад» в «Контроллере навигации»
  • Быстрое приложение работает только при построении для Time Profiler Xcode?
  • AURenderCallback в Swift
  • Попытка сделать табличное представление таблицы UITableView вне границ таблицы
  • Xcode последовательно не запускает приложение на устройстве: «Неизвестный ответ пакета:« тайм-аут »для пакета среды».
  • iOS 7 UINavigationBar находится выше содержимого при использовании автоматической компоновки
  • Offline Map With Routing - iOS
  • Ошибка компоновщика зависимостей подпроекта Xcode с React Native
  • Когда использовать раскадровку и когда использовать XIB
  • Не удалось выполнить подписание кода при распространении приложения в организаторе
  • Interesting Posts

    Передача UDP с использованием CFSocket на IOS

    Почему я могу получить ошибку автоопределения ограничения, которое не должно быть установлено для класса размера?

    cloudKit: CKFetchRecordChangesOperation в общедоступной базе данных

    iOS – UITableView не прокручивается до нижней

    Невозможно выбрать пользовательский класс для контроллера табличного представления (UITableViewController)

    Проверьте, была ли Apple возвращена невозобновляемая подписка?

    Рисование линий перекрытия Great Circle на MKMapView

    Восстановить уже купленные в приложении покупки на iPhone?

    Отменить все операции + AFNetworking 3.0

    Ошибка в документации iOS относительно альфа-свойства UIView?

    Как я могу создать один UITableView с двумя источниками данных

    iOS: метод возвращает блок, тогда блок хранится в массиве, когда его следует копировать?

    Поиск последней строки текста из UILable / UITextView

    Архитектура VIPER: как получить информацию о возврате из модуля

    Когда устанавливается контент contentSize UITableView?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.