簡體   English   中英

異步下載圖像

[英]Downloading Images Asynchronously

我正在使用給定代碼從其相應的URL下載圖像,但是由於某些問題,它無法正常工作,並且我無法診斷出問題。 請幫我解決這個問題。 提前致謝。

-(void)createScrollViewControls
{
    [self removeAllControlsFromScrollView];

    totalNumberOfImages=[arrImages count];       

    __block int x=0;
    __block int y=0;
    __block int scroll=0;
    __block UIImage *tempimag=nil;

    if(totalNumberOfImages>0) //If product images are there
    {
//        imageScroll.contentSize=CGSizeMake(imageScroll.frame.size.width*totalNumberOfImages, IMAGEHEIGHT);

        for(int i=0;i<totalNumberOfImages;i++){

            NSLog(@"Value=%@",arrImages);

            UIActivityIndicatorView *activity= [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(77+scroll, 38, 30, 30)];
            [activity setBackgroundColor:[UIColor clearColor]];
            [activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
            [imageScroll addSubview:activity];
            [activity startAnimating];              

            dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
            dispatch_async(concurrentQueue, ^{

             NSURL *imageURL=[NSURL URLWithString:[arrImages objectAtIndex:i]];   

                NSData *tempData=[NSData dataWithContentsOfURL:imageURL];
                UIImage *tImage=[UIImage imageWithData:tempData];

                if (tImage==nil)
                {
                    tImage=[UIImage imageNamed:@"NoImage.png"];
                }
                dispatch_async(dispatch_get_main_queue(), ^{


                    tempimag= tImage;

                    UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(x, y, IMAGEWIDTH, IMAGEHEIGHT)];

            //if url is there but image not getting downloaded then show a static image
                    if (!tempimag)
                    {
                        imageScroll.contentSize=CGSizeMake(imageView.frame.size.width, IMAGEHEIGHT);

                        NSLog(@"no underlying data");
                        imageView.image = [UIImage imageNamed:kNoImageAvailable];
                        [imageScroll addSubview:imageView];
                       // totalNumberOfImages = 0;
                    }
                    else{

                        [activity stopAnimating];
                        imageScroll.contentSize=CGSizeMake(imageScroll.frame.size.width*totalNumberOfImages, IMAGEHEIGHT);
                        imageView.image=tempimag;
                        [imageScroll addSubview:imageView];
                        x=x+imageScroll.frame.size.width;

                    }    

                });

            });

/*
            UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(x, y, IMAGEWIDTH, IMAGEHEIGHT)];



     if (!tempimag)//if url is there but image not getting downloaded then show a static image
            {
                imageScroll.contentSize=CGSizeMake(imageView.frame.size.width, IMAGEHEIGHT);

                NSLog(@"no underlying data");
                imageView.image = [UIImage imageNamed:kNoImageAvailable];
                [imageScroll addSubview:imageView];
                totalNumberOfImages = 0;
                break;
            }
            else{
                imageScroll.contentSize=CGSizeMake(imageScroll.frame.size.width*totalNumberOfImages, IMAGEHEIGHT);
                imageView.image=tempimag;
                [imageScroll addSubview:imageView];
                x=x+imageScroll.frame.size.width;   
            }
        } */

            scroll+=184;
    }
}

下面的代碼行:

if (tImage==nil)
            {
                tImage=[UIImage imageNamed:@"NoImage.png"];
            }

將始終使您的程序控制權轉到:

if (!tempimag)
                {
                    imageScroll.contentSize=CGSizeMake(imageView.frame.size.width, IMAGEHEIGHT);

                    NSLog(@"no underlying data");
                    imageView.image = [UIImage imageNamed:kNoImageAvailable];
                    [imageScroll addSubview:imageView];
                   // totalNumberOfImages = 0;
                }

請刪除提到的代碼的第一部分,然后嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM