user6517192
user6517192

Reputation:

showing activity indicator within UIImageView

I am trying to add an activity indicator into an imageView as follows when I am downloading the contents from url but the problem is that the activity indicator is not visible.

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
    recipeImageView.image = nil;

    if ([imageArray count] >0){
        if(cachedImage[[imageArray objectAtIndex:indexPath.row]] != nil){
            recipeImageView.image = cachedImage[[imageArray objectAtIndex:indexPath.row]];
        }
        else{
            UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            activityIndicator.frame = CGRectMake(140, 236, 37, 37);
            [activityIndicator startAnimating];
            [recipeImageView addSubview:activityIndicator];
            self.view.userInteractionEnabled = NO;

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
                NSData *data0 = [NSData dataWithContentsOfURL: [NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]]];
                UIImage *image = [UIImage imageWithData: data0];

                dispatch_sync(dispatch_get_main_queue(), ^(void) {
                    recipeImageView.image = image;
                    [activityIndicator stopAnimating];
                    cachedImage[[imageArray objectAtIndex:indexPath.row]] = image;
                });
            });
        }
    }

How can i be able to show the activity indicator within imageview with progress percent if possible?

Upvotes: 1

Views: 4756

Answers (3)

remyr3my
remyr3my

Reputation: 778

 UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

[indicator startAnimating];
[indicator setCenter:self.recipeImageView.center];
[self.contentView addSubview:indicator];

Upvotes: -1

Ekta Padaliya
Ekta Padaliya

Reputation: 5799

Try this:

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        activityIndicator.center = recipeImageView.center; 
        [activityIndicator startAnimating];
        [recipeImageView addSubview:activityIndicator];
        self.view.userInteractionEnabled = NO;

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
            NSData *data0 = [NSData dataWithContentsOfURL: [NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]]];
            UIImage *image = [UIImage imageWithData: data0];

            dispatch_sync(dispatch_get_main_queue(), ^(void) {
                recipeImageView.image = image;
                [activityIndicator stopAnimating]; 
                [activityIndicator removeFromSuperview];
                cachedImage[[imageArray objectAtIndex:indexPath.row]] = image;
            });
        });

Upvotes: 1

Pushkraj Lanjekar
Pushkraj Lanjekar

Reputation: 2294

Just update your code and try this

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
    recipeImageView.image = nil;

    if ([imageArray count] >0){
        if(cachedImage[[imageArray objectAtIndex:indexPath.row]] != nil){
            recipeImageView.image = cachedImage[[imageArray objectAtIndex:indexPath.row]];
        }
        else{
            UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            [activityIndicator setCenter: recipeImageView.center];
            [activityIndicator startAnimating];
            [cell.contentView addSubview:activityIndicator];

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
                NSData *data0 = [NSData dataWithContentsOfURL: [NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]]];
                UIImage *image = [UIImage imageWithData: data0];

                dispatch_sync(dispatch_get_main_queue(), ^(void) {
                    recipeImageView.image = image;
                    [activityIndicator removeFromSuperview];
                    cachedImage[[imageArray objectAtIndex:indexPath.row]] = image;
                });
            });
        }
    }

Upvotes: 3

Related Questions