0

uiscroll ビューに遅延読み込みを実装する方法

Web サービスから 15 枚の画像を取得し、UIscrollview に追加します。スクロール ビューに一時的な画像を追加したいのですが、画像の準備ができたら、画像を uiscrollview に追加できます。

-(void)loadthscroll:(NSMutableArray *)idarray:(NSMutableArray *)imgarray
{



/*************scroll for scroll in in theater******************/

scrollview_intheater= [[UIScrollView alloc] initWithFrame:CGRectMake(0, btn_thhead.frame.size.height,view_banner.frame.size.width, view_intheater.frame.size.height-btn_thhead.frame.size.height)];
[view_intheater addSubview:scrollview_intheater];

[scrollview_thcsoon removeFromSuperview];
adj=5;
currentx=5;
for(int i=0;i<[imgarray count];i++)

{

    btn_theater_ct = [UIButton buttonWithType:UIButtonTypeCustom];
    btn_theater_ct.frame=CGRectMake(currentx, 5, 95, 120);
    [btn_theater_ct addTarget:self action:@selector(theaterAction:) forControlEvents:UIControlEventTouchDown];
    [scrollview_intheater addSubview:btn_theater_ct];
    addr = [imgarray objectAtIndex:i];
    addr = [addr stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
    //NSLog(@"addr-------%@",addr);
    data_theater = [NSData dataWithContentsOfURL:[NSURL URLWithString:addr ] ];        
    [btn_theater_ct setBackgroundImage:[UIImage imageWithData:data_theater] forState:UIControlStateNormal];
    currentx +=btn_theater_ct.frame.size.width+adj;
    btn_theater_ct.tag=i;
    [scrollview_intheater setContentSize:CGSizeMake(currentx,0)];
    NSLog(@"add th scroll--%d----%d",[imgarray count],i);

}


}
4

3 に答える 3

1

数日前に同じ問題に直面しましたが、今はインポートして修正しました

#import "UIImageView+AFNetworking.h"

そしてその方法を実装する

- (void)setImageWithURL:(NSURL *)url  placeholderImage:(UIImage *)placeholderImage;

これを使用するには、 AFNetworkingクラスを使用する必要があります

于 2013-09-30T12:24:53.863 に答える
0

GCD(GrandCentralDispatch) を勉強して、自分のシナリオで作業してみてください。これはあなたに合っているかもしれません。

    -(void)loadthscroll:(NSMutableArray *)idarray:(NSMutableArray *)imgarray
    {

    scrollview_intheater= [[UIScrollView alloc] initWithFrame:CGRectMake(0, btn_thhead.frame.size.height,view_banner.frame.size.width, view_intheater.frame.size.height-btn_thhead.frame.size.height)];
    [view_intheater addSubview:scrollview_intheater];

    [scrollview_thcsoon removeFromSuperview];
    adj=5;
    currentx=5;


    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
//Here, do your iteration part like parsing URL from array and hitting the service which is background thread.            

            for(int i=0;i<[imgarray count];i++)
          {
                btn_theater_ct = [UIButton buttonWithType:UIButtonTypeCustom];
                btn_theater_ct.frame=CGRectMake(currentx, 5, 95, 120);
                [btn_theater_ct addTarget:self action:@selector(theaterAction:)                                                 forControlEvents:UIControlEventTouchDown];
                [scrollview_intheater addSubview:btn_theater_ct];

            currentx +=btn_theater_ct.frame.size.width+adj;
                [scrollview_intheater setContentSize:CGSizeMake(currentx,0)];

            NSLog(@"add th scroll--%d----%d",[imgarray count],i);
            addr = [imgarray objectAtIndex:i];
                addr = [addr stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
                //NSLog(@"addr-------%@",addr);
                data_theater = [NSData dataWithContentsOfURL:[NSURL URLWithString:addr ] ];   
            UIImage *receivedImage = [UIImage imageWithData:data_theater];
            }
                dispatch_async(dispatch_get_main_queue(), ^{

//Here, do your UI work like set the background image which is include in main thread                    

                    if([receivedImage isKindOfClass:[UIImage class]])
                    {
                        [btn_theater_ct setBackgroundImage: receivedImage];
                    btn_theater_ct.tag=i;
                    }
                });

        });

    }
于 2013-09-30T10:56:09.977 に答える
0
  1. UIScrollView 全体をloading image
  2. 指定された画像を交換し、必要に応じてコンテンツのサイズを更新するメソッドを作成します
  3. 画像をダウンロードするルーチンを追加します

これで、UIScrollView をセットアップし、ルーチンを呼び出してダウンロードできます。ダウンロードが完了したら、メソッドを呼び出して画像を交換すれば完了です。

于 2013-09-30T09:34:24.023 に答える