Как я могу обновить содержимое CALayer, пока основной поток заблокирован? - PullRequest
1 голос
/ 03 февраля 2012

Экземпляр AVCaptureVideoPreviewLayer продолжает обновлять свое содержимое из потока видеозахвата, даже когда основной поток заблокирован.Можно ли вообще повторить это поведение с пользовательским подклассом CALayer?Другими словами, учитывая данные необработанного изображения, можем ли мы обновить то, что отображается на экране, когда основной поток заблокирован?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

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

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

Почему бы вместо этого не выполнить другую задачу в фоновом потоке? Это стандартная практика.

0 голосов
/ 22 ноября 2017

Я нашел способ обновить пользовательский интерфейс в не-пользовательском потоке. Мы можем извинить код в любом потоке, и он фактически изменяет преобразование слоя, даже когда основной поток спит.

self.labelLayer.transform = CATransform3DMakeScale(1.2, 1.2, 1.0);

Так что, если кто-то может объяснить это, пожалуйста, не стесняйтесь, конкатуй меня!

...