Настройка 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];
}