如何实现延迟加载到 uiscroll 视图
我正在从网络服务中获取 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);
}
}
几天
前我遇到了同样的问题,但现在我通过以下方式修复了它进口
#import "UIImageView+AFNetworking.h"
并实现其方法
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage;
要使用它,您必须使用 AFNetworker class
- 使用
loading image
设置整个 UIScrollView - 创建一个交换给定图像的方法,并根据需要更新内容大小
- 添加例程下载图像
现在,您可以设置 UIScrollView 并调用例程进行下载。然后,当下载完成后,调用该方法交换图像,您就完成了。
尝试研究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;
}
});
});
}