Настройка iOS для значения индикатора выполнения во время обработки изображений - PullRequest
2 голосов
/ 02 сентября 2011

У меня есть приложение, обрабатывающее пару изображений с использованием Quartz, и я хотел иметь UIProgressView, который меняется после каждого действия.(например, 0,0 0,2 0,4 0,6 0,0 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 Ответ

2 голосов
/ 02 сентября 2011

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

Взгляните на [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];

}
...