Задача SwiftUI блокирует пользовательский интерфейсIOS

Программируем под IOS
Ответить
Anonymous
 Задача SwiftUI блокирует пользовательский интерфейс

Сообщение Anonymous »


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

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

Я хочу отобразить ProgressView во время этого процесса, однако замечаю, что основной пользовательский интерфейс блокируется, несмотря на Task/Async/Await с SwiftUI.

Ниже приведен минимально воспроизведенный пример того, чего я пытаюсь достичь:

struct ContentView: Просмотр { let array = ["один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать" ", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать", "двадцать"] @State varideProgressView = true @State var pdfURL: URL? var body: some View { ВСтек { если !hideProgressView { ПрогрессВью() .progressViewStyle(.circular) .padding(.дно) } Кнопка { скрытьПрогрессВью = ложь Задача { ожидайте рендервиев() скрытьПрогрессВью = истина // показываем PDF } } этикетка: { Текст("Создать PDF") } .buttonStyle(.borderedProminent) } } @Главный актер func renderView() асинхронный { let url = URL.documentsDirectory.appending(путь: "output.pdf") var box = CGRect (x: 0, y: 0, ширина: 200, высота: 200) Guard let pdf = CGContext(url as CFURL, mediaBox: &box, nil) else { возвращаться } для элемента в массиве { pdf.beginPDFPage(ноль) let renderer = ImageRenderer(content: Текст(пункт) ) renderer.render { размер, контекст в контекст(pdf) } pdf.endPDFPage() } PDF.closePDF() pdfURL = URL } } Это не слишком хорошо показывает задержку, но в более сложном представлении, для рендеринга которого требуется некоторое время, блокировка пользовательского интерфейса является значительной, а ProgressView никогда не отображается.

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»