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

Еще одна вещь, которую вы пытаетесь решить, пытаясь решить проблемы с индексацией, и вы так далеко от страницы!

Попробуйте добавить этот флаг к настройкам сборки.

Xfrontend -warn-long-expression-type-checking=400

build settings flag [/g0]

Это вызовет предупреждение, когда компилятор занимает много времени, чтобы вывести сложное выражение.

warning [/g1]

Это может привести к ошибке сборки, которая исчезнет после того, как вы найдете медленные выражения, а затем удалите флаг сборки.

29
задан Community 23 May 2017 в 11:53
поделиться

5 ответов

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

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

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

  • drawViewHierarchyInRect:afterScreenUpdates:: то же самое, если вам нужны все подпредставления нарисованные тоже (например, метки, кнопки ...)

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

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

55
ответ дан Vinzzz 23 May 2017 в 11:53
поделиться

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

- (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;
}
30
ответ дан user1526474 23 May 2017 в 11:53
поделиться

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

  1. , только что добавил один UIImageView и метод, чтобы сделать скриншот в .h file

@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. ниже - вывод, который я получил.

enter image description here

6
ответ дан swiftBoy 23 May 2017 в 11:53
поделиться

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

0
ответ дан Bartosz Ciechanowski 23 May 2017 в 11:53
поделиться

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

[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]

во время продолжающейся анимации. Установите afterScreenUpdates = NO, чтобы избавиться от глюков.

5
ответ дан ancajic 23 May 2017 в 11:53
поделиться