【问题标题】:How to cache image on webview?如何在 webview 上缓存图像?
【发布时间】:2013-07-01 08:29:28
【问题描述】:

我在 UIViewController 中有一个 UIWebView。我正在通过这个函数为 UIWebView 加载内容:

 - (void)loadHTMLString:(NSString *)html {
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSURL *baseURL = [NSURL fileURLWithPath:path];
    [self.webView loadHTMLString:html baseURL:baseURL];
}

如果我的内容包含许多图像,我会通过 FGallery (https://github.com/gdavis/FGallery-iPhone) 创建一个图库。当我第一次打开 UIViewController 时,我正在 UIWebView 中加载图像和文本。我关闭应用程序并关闭网络。然后我打开我的应用程序并打开一个 UIViewController。我正在从缓存中加载我的 UIWebView。但我有一个问题。如果我在关闭网络之前打开图库,则不会从缓存中加载图库的封面,但会加载图库中的所有图像。如果我在关闭网络之前没有打开画廊,画廊的封面将从缓存中加载。画廊的封面和画廊的第一张图片是一样的。

为什么我打开画廊后画廊的封面无法加载?

【问题讨论】:

    标签: ios objective-c caching uiwebview fgallery


    【解决方案1】:

    可能是webview的合适答案

    - (BOOL)webView:(UIWebView*)webViewRef shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
        if (navigationType == UIWebViewNavigationTypeLinkClicked) 
        {
            NSURL *URL = [request URL]; //Get the URL
            if ( [[URL scheme] isEqualToString:@"objc"] ) {
                webView = webViewRef;
                SEL method = NSSelectorFromString( [URL host] );
                if ([self respondsToSelector:method])
                {
                    [self performSelector:method withObject:nil afterDelay:0.1f];
                }
                return NO;
            }
        }
       return YES;
    }
    -(void)takePicture
    {
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.delegate = self;
        id delegate = [[UIApplication sharedApplication] delegate];
        [[delegate viewController] presentModalViewController:imagePicker animated:YES];
        [imagePicker release];
    }
    
    #pragma mark - Image Picker
    
    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        NSData *flatImage = UIImageJPEGRepresentation(image, 0.1f);
        NSString *image64 = [flatImage base64EncodedString];
        NSString *js = [NSString stringWithFormat: @"processImage('data:image/jpeg;base64,%@')", image64];
        [webView stringByEvaluatingJavaScriptFromString:js];
        [picker dismissModalViewControllerAnimated:YES];
    }
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
        //cancel was hit inside of the camera view
        [picker dismissModalViewControllerAnimated:YES];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多