Пользовательский индикатор активности 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];
}
Другие вопросы по тегам