![](/img/trans.png)
[英]Is there a way to pre-load 1000's of images using SDWebImage into cache without actually showing them on screen?
[英]How should I pre-load all images and cache them using AFNetworking?
我需要在應用程序的開頭預加載並緩存所有(將近80張)圖像,同時向用戶顯示“請稍候”。 我所做的是:
NSMutableArray *operations = [[NSMutableArray alloc] init];
for(Category *c in shop.menu.categories){
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:c.imagePath] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil cacheName:@"nscache"
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
}];
[operations addObject:operation];
for(Item *i in c.items){
NSURLRequest *request2 = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:i.imagePath] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
AFImageRequestOperation *operation2 = [AFImageRequestOperation imageRequestOperationWithRequest:request2 imageProcessingBlock:nil cacheName:@"nscache"
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
}];
[operations addObject:operation2];
}
}
[[APIClient sharedClient] enqueueBatchOfHTTPRequestOperations:operations
progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations)
{
float percentDone = 100 * ((float)((int)numberOfCompletedOperations) / (float)((int)totalNumberOfOperations));
//appDelegateHUD.progress = percentDone;
NSLog([NSString stringWithFormat:@"%f", percentDone]);
}
completionBlock:^(NSArray *operations)
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate hideHUDWithDelay:0];
}];
使用此代碼塊,可以成功緩存某些圖像,而其他圖像則不能。 我正在使用此代碼塊:
AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:imageRequest
imageProcessingBlock:nil
cacheName:@"nscache"
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
[UIView beginAnimations:@"ToggleViews" context:nil];
[UIView setAnimationDuration:1.0];
imageview.image = image;
[UIView commitAnimations];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){ NSLog([error description]); }
];
[operation start];
圖片應該直接顯示,因為它們都應該在緩存中。 但是它們加載得晚了一些。 我在某些代碼中錯了嗎?
我想您不必等待所有圖像都將被下載
[[APIClient sharedClient] enqueueBatchOfHTTPRequestOperations:operations
progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations)
{
float percentDone = 100 * ((float)((int)numberOfCompletedOperations) / (float)((int)totalNumberOfOperations));
//appDelegateHUD.progress = percentDone;
NSLog([NSString stringWithFormat:@"%f", percentDone]);
}
completionBlock:^(NSArray *operations)
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate hideHUDWithDelay:0];
// here you just hide HUD, but here you should start load images to UI
}]
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.