Question

I am trying to manage the activity indicator from my App Delegate, that way any of my views can put the indicator up. So, I am adding it as a subview to 'window' and start/stop as follows:

- (void)didStartActivity
{
    if( activityIndicator == nil ) {
        activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        activityIndicator.hidesWhenStopped = YES;
        activityIndicator.center = window.center;
        activityIndicator.transform = CGAffineTransformScale(CGAffineTransformIdentity, 6.0, 6.0);
    }
    NSLog(@"%s: starting the activityIndicator", __FUNCTION__);
    [window addSubview:activityIndicator];
    [activityIndicator startAnimating];
}

I see the log messages, so I know the code is being invoked. The indicator is at the center and 6x the default size. However, the stopAnimating isn't stopping. The only thing I can conclude is that it needs to run in the present view controller.

- (void)didStopActivity
{
    NSLog(@"%s: stopping the activityIndicator", __FUNCTION__);
    [activityIndicator stopAnimating];
    [activityIndicator removeFromSuperview];
}
Was it helpful?

Solution 3

OK. I did my experiment and sure enough, it worked flawlessly when I added the activity indicator as a subview of viewcontroller's view. However, when I then used that new simpleton project to try it as a subview to window it also worked. Obviously a bug in my code and it needs more inspection.

I will award both Eimantas with the answer as the debug notion was helpful in my solution.

OTHER TIPS

Are you trying to do this from a background thread? An easy and definitive test would be to add:

NSLog(@"thread: %@", [NSThread currentThread]);

check if your activityIndicator isn't nil:

NSLog(@"activityIndicator: %@", activityIndicator);

if your log is nil then do this:

in ".h" declare :

__strong UIActivityIndicatorView *activityIndicator

the __strong avoid ARC and then you can remove and stop the activityIndicator.

[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];

If you are adding it to the superview more than one time it will not work.

Try putting

[superView addSubview:activityIndicator];

into the

if( activityIndicator == nil ) {

condition

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top