Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Безопасный способ рендеринга UIVIew в изображение в фоновом потоке?

Автор вопроса: Mark StruzinskiОтветов: 1

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

  1. Создайте контроллер представления, который представляет пользовательский интерфейс, который я хочу показать на экране.
  2. Получить вид из контроллера представления и отобразить из него изображение.
  3. Сохраните его на диск и отобразите на экране позже

У меня происходит сбой, когда я пытаюсь получить доступ к представлению контроллера представления. Когда я пытался исследовать это в Интернете, я получаю противоречивые результаты о том, безопасно ли создавать представление в фоновом режиме. Я читаю, что вызов UIGraphicsGetCurrentContext должен быть потокобезопасным, но, возможно, не имеет доступа к UIView в фоновом потоке? Я пишу приложение для iOS 4 и выше. Вот код, который я использую (плитка - это контроллер просмотра):

CGSize size = CGSizeMake(20.0f, 30.0f);
UIGraphicsBeginImageContext(size);
[tile.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Сбой происходит при попытке доступа к свойству .view на плитке (EXC_BAD_ACCESS). Весь смысл в том, чтобы визуализировать представление в фоновом изображении, чтобы предотвратить блокировку пользовательского интерфейса, потому что нужно обработать много плиток.

Есть ли безопасный способ сделать это?

  • Вы когда-нибудь находили хорошее решение для этого? Ben Williams 01.11.2012
  • Я столкнулся с такой же аварией. Согласно документации Apple, renderInContext МОЖЕТ БЫТЬ использовано на разная нить. Однако на самом деле он загадочным образом падает. Кто-нибудь нашел решение этой проблемы? Howy 17.07.2013
  • Ты нашел решение для этого, Марк? Roi Mulia 22.09.2017

iosmultithreadinguiview

Ответы

Ответ 1 · рейтинг 2 · Pieter

Я никогда не пробовал то, что вы описали, и мне не нравится быть вестником плохих новостей, но взято из документация Apple.

Примечание. В большинстве случаев классы UIKit следует использовать только в основном потоке приложения. Это особенно верно для классов, производных от UIResponder, или для тех, которые каким-либо образом манипулируют пользовательским интерфейсом вашего приложения.

Конечно, они удобно говорят "по большей части", так что остается место для маневра.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы