Настройка iOS Значение индикатора выполнения во время обработки изображений

У меня есть приложение, обрабатывающее пару изображений с помощью Quartz, и я хотел, чтобы UIProgressView менялся после каждого действия. (например, 0,0 0,2 0,4 0,6 0,8 1,0)

Проблема в том, что, кажется, в то время как мое изображение обрабатывается, пользовательский интерфейс полностью заблокирован, и значение изменяется только после того, как весь процесс завершен (это означает, что он просто достигает 1,0, не пройдя подэтапы),

Кто-нибудь из вас когда-либо сталкивался с этим?

Псевдо:

for(uint i=0;i<5;i++){
    // Execute some Quartz based action here, such as CGContextDrawTiledImage etc...
    myProgress.progress = (i+1) * 0.2;          
}

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

Спасибо
Шай.

1 ответ

Решение

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

Посмотри на [NSThread detachNewThreadSelector:selector toTarget:target withObject:object];

Сделайте ваш прогресс переменной-членом

 [NSThread detachNewThreadSelector:@selector(updateFilterProgress) toTarget:self withObject:nil];

 prgLoader.progress = x;


- (void) updateFilterProgress{

    NSAutoreleasePool *pool = [NSAutoreleasePool new];

    while ([prgLoader.progress floatValue] < 1.0f)    //Keep this thread alive till done loading. You might want to include a way to escape (a BOOL flag)
    {
        GTMLoggerInfo(@"Updating progress to %f", [progress floatValue]);
        prgLoader.progress = [progress floatValue];
    }
    [pool release];

}
Другие вопросы по тегам