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 просмотров
Пригласить эксперта
Ответы на вопрос 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];
Ответ написан
Комментировать
@AmikoYuki
Погугли: NSProgressIndicator+ThreadSafeUpdating
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы