How to reload my view in iOS

13,747

The usual way is to call:

[self.imageView setNeedsDisplay];

Edited to Add:

I just realized you said the image view is still (0,0). From the docs :

Setting the image property does not change the size of a UIImageView. Call sizeToFit to adjust the size of the view to match the image.

Share:
13,747
yoyosir
Author by

yoyosir

learning

Updated on June 04, 2022

Comments

  • yoyosir
    yoyosir almost 2 years

    I have a imageView embedded in a scrollView. The imageView needs to be downloaded from the Internet (through flickr api), so I add a thread to handle this. But what am I supposed to do after I finished downloading the image? How can I reload my imageView?Here's my code.

    In fact, it is working fine. but the imageView's size is (0, 0). How can I fix that?

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        if (!self.myImage)
        {
            UIActivityIndicatorView* spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            [spinner startAnimating];
            self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:spinner];
            dispatch_queue_t downloadQueue = dispatch_queue_create("flickr downloader (photo)", NULL);
            dispatch_async(downloadQueue, ^{
                NSData* data = [NSData dataWithContentsOfURL:[FlickrFetcher urlForPhoto:self.photo format:FlickrPhotoFormatLarge]];
                dispatch_async(dispatch_get_main_queue(), ^{
                    self.myImage = [UIImage imageWithData:data];
                    [self.imageView setImage:self.myImage];
                    [self viewDidLoad];
                    [self viewWillAppear:NO];
                    NSLog(@"imageViewSet!");
                    self.navigationItem.rightBarButtonItem = nil;
                });
            });    
            dispatch_release(downloadQueue);
        }
        else
        {
            NSString* imageTitle;
            if ([[self.photo objectForKey:@"title"] length] > 0)
                imageTitle = [self.photo objectForKey:@"title"];
            else if ([[self.photo valueForKeyPath:@"description._content"] length] > 0)
                imageTitle = [self.photo valueForKeyPath:@"description._content"];
            else imageTitle = @"Unknown";
            [[self navigationItem] setTitle:imageTitle];
            self.scrollView.delegate = self;
            self.scrollView.contentSize = self.imageView.image.size;
        }
    }
    
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return self.imageView;
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
    
        [super viewWillAppear:animated];
        double scale = self.imageView.bounds.size.width * 1.0 / self.myImage.size.width;
        if (scale > self.imageView.bounds.size.height * 1.0 / self.myImage.size.height)
            scale = self.imageView.bounds.size.height * 1.0 / self.myImage.size.height;
        NSLog(@"imgview%g, %g",self.imageView.bounds.size.width, self.imageView.bounds.size.height);
        NSLog(@"img%g, %g",self.myImage.size.width, self.myImage.size.height);
        self.imageView.frame = CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height);
        [self.scrollView setZoomScale:scale];
    }