iPad создает PDF с загрузкой анимации - PullRequest
2 голосов
/ 02 мая 2011

Я использую UIGraphicsBeginPDFContextToData для создания PDF-файлов с несколькими страницами.Все работает нормально ... Моя проблема в том, что когда приложение создает большее количество страниц для 1 PDF, оно на короткое время зависает, и я не контролирую пользовательский интерфейс.Файл PDF создан правильно, но я хочу показать экран загрузки или что-то в этом роде.Все, что я тестировал, как UIAlertView внутри UIActivityIndicator или просто UIActivityIndicator на панели инструментов, показывает ПОСЛЕ того, как PDF готов.

Вот мой метод создания объекта NSData.NSLog показывает правильный вывод: я действительно не знаю, как показать прогресс создания PDF.Простой UILabel, который показывает текущую страницу, будет именно тем, что мне нужно.

- (NSData *)createPDFData:(int)type {

    NSLog(@"START");

    NSMutableData *pdfData = [NSMutableData data];
    UIGraphicsBeginPDFContextToData(pdfData, drawImage.bounds, nil);

    if (type == 1) {
        UIGraphicsBeginPDFPage();
        if ([self loadPDFBackground]) [paperImage drawRect:paperImage.bounds];
        [drawImage drawRect:drawImage.bounds];
    } else if (type == 2) {
        NSArray *images = [NSArray arrayWithArray:[self loadImagesForPDF]];
        int imageCount = [images count];
        for (int i=0; i<imageCount; i++) {

            NSLog(@"%@", [NSString stringWithFormat:@"Page %i of %i", i+1, imageCount]);

            drawImage.image = [images objectAtIndex:i];
            UIGraphicsBeginPDFPage();
            if ([self loadPDFBackground]) [paperImage drawRect:paperImage.bounds];
            [drawImage drawRect:drawImage.bounds];
        }
    }

    UIGraphicsEndPDFContext();

    NSLog(@"END");

    return pdfData;
}

1 Ответ

2 голосов
/ 02 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...