Marco Dinatsoli
Marco Dinatsoli

Reputation: 10570

iphone Image doesn't appear after downloading

I am building a simple application to show images.

I send the image url, and it should be downloading.

This is my code:

#import "ImageViewController.h"

@interface ImageViewController ()
@property (nonatomic, strong) UIImageView * imageView;
@property (nonatomic, strong) UIImage * image;
@end

@implementation ImageViewController

-(void)setImageURL:(NSURL *)imageURL{
    _imageURL = imageURL;
    self.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]];
}

-(UIImageView*)imageView{
    if(!_imageView)
        return [[UIImageView alloc]init];
    return _imageView;
}


-(UIImage*)image{
    return self.imageView.image;
}

-(void)setImage:(UIImage *)image{
    self.imageView.image = image;
    [self.imageView sizeToFit];
}

-(void)viewDidLoad{
    [self.view addSubview:self.imageView];
    NSLog(@"Image Url = %@", self.imageURL);
}

@end

I call it like this:

if ([segue.destinationViewController isKindOfClass:[ImageViewController class]]){
        ImageViewController* ivc = (ImageViewController*)segue.destinationViewController;
        ivc.imageURL = [[NSURL alloc]initWithString:[NSString stringWithFormat:@"http://images.apple.com/v/iphone-5s/gallery/a/images/download/%@.jpg", segue.identifier]];

I am 100% sure that the passed url is correct because I already check that through debugging

The image is absolutely being downloaded because its size is large and the screen is blocking while downloading it.

The problem is the that imageView doesn't show it after finishing downloading.

Could u help me please?

Edit

The header file

#import <UIKit/UIKit.h>

@interface ImageViewController : UIViewController
@property(nonatomic, strong) NSURL* imageURL;
@end

This is all my code, so you can test it if you want.

Edit2

I have a scroll view, maybe that is the problem ? Please check the image

enter image description here

Upvotes: 0

Views: 126

Answers (4)

tkanzakic
tkanzakic

Reputation: 5499

You have an issue in the getter of the imageView property. You are not initialising the attribute, but returning a different object each time. Replace the line:

return [[UIImageView alloc]init]; 

by

_imageView = [[UIImageView alloc]init];

Upvotes: 1

Warif Akhand Rishi
Warif Akhand Rishi

Reputation: 24248

You are not assigning you newly created imageView to your _imageView. So every time it triggers imageView method, it returns a new UIImageView. try this...

- (UIImageView*)imageView
{
    if(!_imageView) {
        _imageView = [[UIImageView alloc]init];
        return _imageView;
    }

    return _imageView;
}

Upvotes: 0

KudoCC
KudoCC

Reputation: 6952

Set the imageView's frame instead of sending sizeToFit method.

-(void)setImage:(UIImage *)image{
    self.imageView.image = image;
    // [self.imageView sizeToFit];
    self.imageView.frame = CGRectMake(100.0, 100.0, image.size.width, image.size.height) ;
}

Edit :

I see there is a scrollView on 'self.view', so it may block self.imageView, try to bring it to front using [self.view bringSubviewToFront:self.imageView] ; if you want it be the topmost of all subView on self.view.

Upvotes: 1

Ashutosh
Ashutosh

Reputation: 2225

enter image description herePlease try to edit your code as following it is working for me, in your case problem may be because you are passing url from different view controller that you are :

[self.imageView setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://images.apple.com/v/iphone-5s/gallery/a/images/download/photo_1.jpg"]]]];

You can check from attached screen shot..

Upvotes: 1

Related Questions