FISWebViewPreloader
是一个 Cocoapod,它可以帮助在后台加载 UIWebView
对象,以便在没有延迟的情况下展示。
您可以使用CocoaPods将 FISWebViewPreloader
安装到项目中。
pod 'FISWebViewPreloader', :git => 'https://github.com/jameslin101/FISWebViewPreloader.git'
UIWebView
对象使用FISWebViewPreloader
非常简单。我们建议创建一个私有变量来使用 FISWebViewPreloader
@property (strong,nonatomic) FISWebViewPreloader *preloader;
....
self.preloader = [FISWebViewPreloader new];
每次您需要创建一个预加载的 UIWebView
对象时,您都可以将其 URL 字符串添加到 FISWebViewPreloader
的字典中。
[self.preloader setURLString:@"http://www.google.com" forKey:@"Google"];
如果您需要将网页缩放到适应某个框架,您可以传递您的框架的宽度和长度值
[self.preloader setURLString:@"http://www.apple.com"
forKey:@"Apple"
withCGRect:CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height)];
如果您担心 FISWebViewPreloader 会占用太多内存,您可以定义要创建和预加载的 UIWebView
的数量。
self.preloader = [[FISWebViewPreloader alloc] initWithCapacity:5 scheduleType:FIFO];
这将确保如果添加了超过 5 个 UIWebView
,则根据您指定的 ScheduleType
(后进先出或先进先出)删除较老的 UIWebView
。如果您尝试访问已经出队的 UIWebView
,则将动态重新创建请求的 UIWebView
。
每次您访问 UIWebView 对象时,它将自动被放置在优先队列的头部。
UIWebView
对象访问预加载的 UIWebView
对象有两种方式。您可以在创建时检索您的 UIWebView
对象
UIWebView *googleWebView = [self.preloader setURLString:@"http://www.google.com" forKey:@"Google"];
或者,您可以使用 FISWebViewPreloader
的 webViewForKey:
方法
UIWebView *googleWebView = [self.preloader webViewForKey:@"Google"];
您可以使用以下方法来访问给定 UIWebView
的键
NSString *myKey = [self.preloader keyForWebView:googleWebView];
//myKey will be @"Google"
UIWebViewDelegate
协议如果您的 View Controller 依赖于 UIWebViewDelegate
协议,那么您可以使用与以下类似的模式来访问代理方法
-(void)createWebViews
{
UIWebView *googleWebView = [self.preloader setURLString:@"http://www.google.com" forKey:@"Google"];
googleWebView.delegate = self;
}
#pragma mark UIWebViewDelegate methods
- (void)webViewDidStartLoad:(UIWebView *)webView {
NSLog(@"Started loading %@", [self.preloader keyForWebView:webView]);
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"Finished loading %@", [self.preloader keyForWebView:webView]);
}
UIWebView
对象您可以使用 removeWebViewForKey:
方法来停止销毁您不再需要的任何 UIWebView
对象
[self.preloader removeWebViewForKey:@"Google"];
也可以调用 reset:
方法,销毁预加载程序和优先队列中的所有键/对象对
[self.preloader reset];