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];