UIActivityIndicator выдает - иногда это не останавливает - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть индикатор активности, который работает нормально. Большую часть времени. Но иногда это просто продолжается. Код довольно распространен, поэтому я должен объяснить.

Я делаю расчет. Иногда требуется только обновление, поэтому это быстро. Иногда это занимает много времени и может потребоваться получить новые данные с сервера. Когда расчет занимает некоторое время, индикатор активности работает. Когда он быстрый, индикатор активности будет запускаться, но не останавливаться. Есть ли минимальное время для анимации? Кто-нибудь еще сталкивался с этим?

Я попытаюсь написать что-нибудь, чтобы скрыть startAnimation, основываясь на последнем времени, когда был выполнен расчет. Есть предложения?

ОБНОВЛЕНИЕ: ОК. это решено. Регистрация (как было предложено) действительно показала, что был второй звонок на startAnimating, что привело к состоянию гонки: иногда расчет был достаточно длинным, чтобы оба звонка приходили до остановки. Теперь я удалил второй вызов, и он работает !!

Ответы [ 3 ]

4 голосов
/ 15 декабря 2011

Вы уверены, что звоните stopAnimating из основного потока? Изменения в пользовательском интерфейсе должны быть сделаны в главном потоке. В противном случае вы вообще ничего не испытаете, странное поведение или задержки.

Перед вызовом stopAnimating поместите что-нибудь подобное NSLog, чтобы убедиться, что он вызывается вообще и из основного потока.

NSLog(@"main thread? %@", [NSThread isMainThread] ? @"YES" : @"NO!");

Обновления пользовательского интерфейса из другого потока часто являются причиной неожиданных результатов, особенно для UIActivityIndicatorView, поскольку они обычно используются с потоками.

2 голосов
/ 15 декабря 2011

Я предполагаю, что вы звоните endAnimation до startAnimation или не звоните вовсе.Это наиболее распространенные причины таких проблем ...

Вы пробовали NSLog при вызове этих двух методов?

1 голос
/ 15 декабря 2011

Для этих ситуаций мне нравится строить своего рода индикатор активности с подсчетом ссылок.По сути, каждый раз, когда вы что-то делаете в сети, вы увеличиваете счет активности сети.Затем, когда это будет сделано, вы уменьшите.Если он когда-нибудь достигнет 0, вы остановите его.Если оно выше 0, вы запускаете его.

...