首页 文章

UIImageView需要时间来加载图像

提问于
浏览
0

我有一些问题,我想从特定链接从互联网上下载图像下载此图像发生在其他类,这是singlton类名称更多AppInternet.m

我的moreAppInterNet.m文件如下

// finishedImgDling是bool

// mutableData是NSMutableData

// urlConnection是NSURLConnection

// appimage是UIImage

// imageUrl是包含链接的NSString

(id)sharedManager {

static moreAppInterNet *sharedMyManager = nil;

@synchronized(self) {

    if (sharedMyManager == nil)

        sharedMyManager = [[self alloc] init];
}

return sharedMyManager;

}

  • (void)downloadImageFromUrl {
    finishedImgDling = NO;
[self.mutableData setLength:0];

self.urlConnection = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.imageUrl]] delegate:self];


while(!finishedImgDling) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

}

  • (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if (connection == self.urlConnection)
{

    NSLog(@"imageDling");
}

}

  • (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (connection == self.urlConnection)
{

    if (self.mutableData == nil)
    {
        self.mutableData = [NSMutableData data];
    }

    [self.mutableData appendData:data];
}

}

  • (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == self.urlConnection)
{
    NSLog(@"image Downloaded");

    finishedImgDling = YES;

    [self setUrlConnection:nil];

    [self storeImage];
}

}

  • (void)storeImage {
[self setAppimage:nil];

self.appimage = [UIImage imageWithData:self.mutableData];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];     
NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *path =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"appImage.png"]];

[fileManager createFileAtPath:path contents:UIImagePNGRepresentation(self.appimage) attributes:nil];

 NSLog(@"downloading and storing complete");

}

我的另一个ViewController如下所示,我调用该函数

  • (void)viewDidLoad {
[moreAppInterNet sharedManager];

[self downloadImage];

}

  • (void)downloadImage {
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download_Image_from_other_class) object:nil];

NSOperationQueue *que = [[NSOperationQueue alloc] init];

[que addObserver:self forKeyPath:@"operations" options:0 context:NULL];

[que addOperation:operation];

[operation release];

self.dlingQue = que;

[que release];

}

  • (void)download_Image_from_other_class {
[[moreAppInterNet sharedManager] downloadImageFromUrl];

}

  • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"operations"] && object == self.dlingQue)
{

    if ([self.dlingQue operationCount] == 0)
    {

        self.imgView = [[moreAppInterNet sharedManager] appimage];

        //it takes lots of time to display image in UIImageView
        //Even though Above line get executed
    }
}
else {

    [super observeValueForKeyPath:keyPath ofObject:object
                           change:change context:context];
}

}

问题是self.imgView需要很多时间来加载图像大约5秒,即使它完全下载

任何人都可以帮助我或告诉我我做错了什么

2 回答

  • 0

    我用于网络的库是AFNetworking

  • 1

    我认为您的代码在您请求时会再次下载图像 .

    您需要检查 downloadImageFromUrl 中是否有该文件 .

    可能需要更强大的库来处理文件下载 .

相关问题