Пользовательский индикатор активности XCode - Скрыть после загрузок UIWebView (webViewDidFinishLoad)
Я использую код, найденный здесь http://blog.blackwhale.at/?p=336 чтобы создать кастом activityIndicator
в текущей версии xCode. Этот код использует серию .png
изображения в массиве, а затем отображает их с установленным интервалом, чтобы создать анимированное загрузочное изображение, которое вы можете затем разместить на экране (и при условии, что вы можете каким-то образом удалить его), когда захотите.
В моем основном файле ViewController.m у меня есть следующий код в моем viewDidLoad
раздел:
/* --- START CUSTOM ACTIVITY INDICATOR */
//Create the first status image and the indicator view
UIImage *statusImage = [UIImage imageNamed:@"activity1.png"];
UIImageView *activityImageView = [[UIImageView alloc]
initWithImage:statusImage];
//Add more images which will be used for the animation
activityImageView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"activity1.png"],
[UIImage imageNamed:@"activity2.png"],
[UIImage imageNamed:@"activity3.png"],
[UIImage imageNamed:@"activity4.png"],
[UIImage imageNamed:@"activity5.png"],
[UIImage imageNamed:@"activity6.png"],
[UIImage imageNamed:@"activity7.png"],
[UIImage imageNamed:@"activity8.png"],
[UIImage imageNamed:@"activity9.png"],
[UIImage imageNamed:@"activity10.png"],
[UIImage imageNamed:@"activity11.png"],
[UIImage imageNamed:@"activity12.png"],
nil];
//Set the duration of the animation (play with it
//until it looks nice for you)
activityImageView.animationDuration = 0.6;
//Position the activity image view somewhere in
//the middle of your current view
activityImageView.frame = CGRectMake(
self.view.frame.size.width/2
-statusImage.size.width/2,
self.view.frame.size.height/1.2
-statusImage.size.height/1.2,
statusImage.size.width,
statusImage.size.height);
//Start the animation
[activityImageView startAnimating];
//Add your custom activity indicator to your current view
[self.view addSubview:activityImageView];
/* --- END CUSTOM ACTIVITY INDICATOR */
Я хотел бы очистить / удалить / скрыть activityImageView
элемент, как я хочу, чтобы он показывал только при первом запуске приложения, пока UIWebView
заканчивает загрузку
Я хотел бы позвонить и показать webViewDidStartLoad
а затем ясно, когда webViewDidFinishLoad
, Кто-нибудь поможет??
3 ответа
Итак, причина, по которой вы не можете получить доступ к ActivityImageView, заключается в том, что он объявлен в вашей функции viewDidLoad. Добавьте его как свойство в свой класс ViewController, и вы сможете делать то, что хотите. Убедитесь, что вы удалили объявление ActivityImageView из viewDidLoad и просто инициализировали его там.
Кроме того, где в вашем веб-просмотре вы хотите показать индикатор активности? Есть ли у него отдельный контроллер вида или он входит в основной контроллер вида? Похоже, что ваша область действия ActivityImageView неверна, хотя, не зная, как у вас все настроено, мне сложно сказать, где его разместить.
После того, как вы используете индикатор активности в этих двух местах, планируете ли вы использовать его снова во время выполнения приложений или он будет виден только при перезагрузке приложения? В зависимости от ответа на этот вопрос вы либо захотите просто скрыть его, либо удалить его из основного вида.
UIImageView.hidden - это то, что контролирует видимость.
РЕДАКТИРОВАТЬ, код в соответствии с просьбой:
ViewController.h
@interface ViewController : UIViewController
{
UIWebView *_webView;
}
@property(nonatomic, strong) UIWebView *webView;
@property(nonatomic, strong) UIImageView *activityImageView;
ViewController.m
@implementation ViewController
@synthesize activityImageView;
@synthesize webView = _webView;
-(void)viewDidLoad {
//all your previous stuff with the change that you just alloc activityImageView instead of declare it
activityImageView = [[UIImageView alloc] initWithImage:statusImage];
//The above is the initialization, below is where your old code should go
}
Вы должны пойти так:
- (void)viewDidLoad {
[super viewDidLoad];
//Create the first status image and the indicator view
UIImage *statusImage = [UIImage imageNamed:@"activity1.png"];
UIImageView *activityImageView = [[UIImageView alloc]
initWithImage:statusImage];
//Add more images which will be used for the animation
activityImageView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"activity1.png"],
[UIImage imageNamed:@"activity2.png"],
[UIImage imageNamed:@"activity3.png"],
[UIImage imageNamed:@"activity4.png"],
[UIImage imageNamed:@"activity5.png"],
[UIImage imageNamed:@"activity6.png"],
[UIImage imageNamed:@"activity7.png"],
[UIImage imageNamed:@"activity8.png"],
[UIImage imageNamed:@"activity9.png"],
[UIImage imageNamed:@"activity10.png"],
[UIImage imageNamed:@"activity11.png"],
[UIImage imageNamed:@"activity12.png"],
nil];
//Set the duration of the animation (play with it
//until it looks nice for you)
activityImageView.animationDuration = 0.6;
//Position the activity image view somewhere in
//the middle of your current view
activityImageView.frame = CGRectMake(
self.view.frame.size.width/2
-statusImage.size.width/2,
self.view.frame.size.height/1.2
-statusImage.size.height/1.2,
statusImage.size.width,
statusImage.size.height);
//Start the animation
[activityImageView startAnimating];
//Add your custom activity indicator to your current view
[self.view addSubview:activityImageView];
self.timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/2.0)
target:self
selector:@selector(loading)
userInfo:nil
repeats:YES];
}
- (void)loading {
if (!self.webView.loading) {
[activityImageView stopAnimating];
activityImageView.hidden = 1;
} else {
[activityImageView startAnimating];
}
}
Объявите ваш ActivityImageView как свойство в вашем заголовочном файле и настройте его в своем viewDidLoad:
метод
Вы должны добавить свой ActivityImageView в методе UIWebViewDelegate
- (void)webViewDidStartLoad:(UIWebView *)webView
А потом stopAnimating
а также removeFromSuperview
в методах UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
Вы должны прочитать документацию UIImageView и справку по протоколу UIWebViewDelegate.
ОБНОВИТЬ
В вашем заголовке:
@property(nonatomic, retain) UIImageView *activityImageView;
В вашей реализации
@synthesize activityImageView;
-(void)viewDidLoad{
activityImageView = [[UIImageView alloc]
initWithImage:statusImage];
//Add more images which will be used for the animation
activityImageView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"activity1.png"],
[UIImage imageNamed:@"activity2.png"],
[UIImage imageNamed:@"activity3.png"],
[UIImage imageNamed:@"activity4.png"],
[UIImage imageNamed:@"activity5.png"],
[UIImage imageNamed:@"activity6.png"],
[UIImage imageNamed:@"activity7.png"],
[UIImage imageNamed:@"activity8.png"],
[UIImage imageNamed:@"activity9.png"],
[UIImage imageNamed:@"activity10.png"],
[UIImage imageNamed:@"activity11.png"],
[UIImage imageNamed:@"activity12.png"],
nil];
//Set the duration of the animation (play with it
//until it looks nice for you)
activityImageView.animationDuration = 0.6;
//Position the activity image view somewhere in
//the middle of your current view
activityImageView.frame = CGRectMake(
self.view.frame.size.width/2
-statusImage.size.width/2,
self.view.frame.size.height/1.2
-statusImage.size.height/1.2,
statusImage.size.width,
statusImage.size.height);
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
[self.activityImageView startAnimating];
[self.view addSubview:activityImageView];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[activityImageView stopAnimating];
[activityImageView removeFromSuperview];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
[activityImageView stopAnimating];
[activityImageView removeFromSuperview];
}