Чтобы иметь точную UIProgressView
, вам нужно иметь какую-то задачу, что:
- Вы можете получить информацию, пока она не завершена
- Количественно его «полнота» как процент на основе этой информации ,
Теперь, когда вы загружаете UIWebView
, это невозможно. И Apple тоже этого не делает. Apple часто использует подделку UIProgressView
s, чтобы дать вам возможность посмотреть, пока загружается страница. Почта также использует поддельные представления прогресса. Попробуйте сами. Это как подделка мнения о ходе работы компании Apple:
- мнение прогресс начинает двигаться в медленном, с постоянной скоростью
- Если задача завершается до завершения бара, он вдруг молниеносно по всей остальной до 100%, прежде чем исчезнуть
- Если задача занимает много времени, представление прогресса остановится на уровне 95% и останется там до завершения задачи.
Для этого вам необходимо будет анимировать progressView вручную. Вы можете подклассифицировать его, но это, вероятно, будет немного продвинутым для вас. Самый простой способ будет таким:
В myViewController.h
@interface myViewController : UIViewController {
BOOL theBool;
//IBOutlet means you can place the progressView in Interface Builder and connect it to your code
IBOutlet UIProgressView* myProgressView;
NSTimer *myTimer;
}
@end
В myViewController.m
#import "myViewController.h"
@implementation myViewController
- (void)webViewDidStartLoad:(UIWebView *)webView{
myProgressView.progress = 0;
theBool = false;
//0.01667 is roughly 1/60, so it will update at 60 FPS
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.01667 target:self selector:@selector(timerCallback) userInfo:nil repeats:YES];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
theBool = true;
}
-(void)timerCallback {
if (theBool) {
if (myProgressView.progress >= 1) {
myProgressView.hidden = true;
[myTimer invalidate];
}
else {
myProgressView.progress += 0.1;
}
}
else {
myProgressView.progress += 0.05;
if (myProgressView.progress >= 0.95) {
myProgressView.progress = 0.95;
}
}
}
@end
Затем, когда ваша задача будет завершена, установите theBool = true;
и вид прогресса будет заботиться само по себе. Измените значения в элементе if, чтобы контролировать скорость анимации.
Проверьте ответы здесь, чтобы получить лучшее решение относительно места, где вы поместите код для индикатора выполнения. Http://stackoverflow.com/questions/23966697/show-progress-bar-until-it-load-the-data -in-uiwebview-ios7 – Suhaib