Задать вопрос
absterno
@absterno

Как реализовать движения прогресса в NSProgressIndicator?

Как правильно реализовать движение прогресса в NSProgressIndicator (determinate)?

Сейчас я реализовал его так:

IBOutlet NSProgressIndicator *progressIndicator;

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *content = [fileManager contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:nil];

        double countList = (double)[content count];
        [progressIndicator setIndeterminate:NO];
        [progressIndicator setMinValue:0.0];
        [progressIndicator setMaxValue:countList];
        [progressIndicator setDoubleValue:0.0];

        for (NSURL *u in content) {
           Element *e = [[Element alloc] initElement:[u path]];
           [list addObject:e];
           [progressIndicator incrementBy:1.0];
        }

Я понимаю, что выставлять setMaxValue: количеством файлов это неправильно. Т.е. progressIndicator должен быть в фиксированном диапазоне, например, от 0 до 100, а его движение или incrementBy:count, в смысле count, должен рассчитываться по формуле.

Подскажите, пожалуйста, формулу, как правильно рассчитывать движение прогресса?

Или если есть другие варианты реализации движения NSProgressIndicator, опишите их, желательно приведите пример или дайте ссылку на полезную статью.

Зарание всех благодарю.
  • Вопрос задан
  • 446 просмотров
Подписаться 3 Оценить Комментировать
Ответ пользователя feniksqip К ответам на вопрос (2)
@feniksqip
Попробуйте решить математически: Взять примерный объем данных,например 50 файлов за 100 %(макс уровень шкалы)=X и инкремент считать делением : X%50 (ваша степень плавности). Получение объема данных послать в отдельном потоке:
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSOperation *loadObj = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(loadInBackground:)
object:yourObj];
[queue addOperation:loadObj];
Ответ написан
Комментировать