Ios Swift:UIWebView加载旧内容

Ios Swift:UIWebView加载旧内容,ios,iphone,swift,uiwebview,Ios,Iphone,Swift,Uiwebview,我的应用程序有一个ViewController、一个UIWebView和4个UIImageView 我的应用程序中的控制流: ->从摄像头捕获图像并存储到UIImage变量中,这发生在didfishpickingMediaWithInfo函数中。对图像进行一些处理 ->从didFinishPickingMediaWithInfo函数中,加载带有内嵌html/css代码的UIWebView webview.hidden = false WebView.loadHTMLString(htmlStri

我的应用程序有一个
ViewController
、一个
UIWebView
和4个
UIImageView

我的应用程序中的控制流:

->从摄像头捕获图像并存储到
UIImage
变量中,这发生在
didfishpickingMediaWithInfo
函数中。对图像进行一些处理

->从
didFinishPickingMediaWithInfo
函数中,加载带有内嵌html/css代码的
UIWebView

webview.hidden = false
WebView.loadHTMLString(htmlString, baseURL: nil) 
->将上述html加载到UIWebView后,将调用委托函数webViewDidFinishLoad。从webViewDidFinishLoad,使用以下代码将UIWebView中加载的任何内容的快照拍摄到图像中:

var image:UIImage?
  autoreleasepool{
            UIGraphicsBeginImageContextWithOptions(WebView.frame.size, false, 1.0)
            WebView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
            image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
        }
->将捕获的图像存储到UIImage变量中

->将另一个不同的html/css代码加载到同一个UIWebView中(我仍然在webViewDidFinishLoad函数中):html加载代码与上面相同,即

WebView.loadHTMLString(htmlString1, baseURL: nil)
->webViewDidFinishLoad再次被调用,因为在上述步骤中加载了新的html代码,我做了同样的事情,即将UIWebView内容的快照拍摄到UIImage变量中,并加载新的html模式

->我这样做了4次,也就是说,最后我在4个UIImage变量中捕获了4个图像。我将所有这4幅图像加载到我故事板上的4 UIImageView中

->然后我解雇了imagepicker

imagePicker.dismissViewControllerAnimated(true, completion: nil)
以下是我最后看到的问题:

->有时,图像1与图像2相同,有时所有图像都相同。这是随机发生的。我确信这4张图片都是独一无二的。因为我在每个步骤中加载不同的html代码

  • 在上面的顺序中,我做错了什么

您可以尝试以下几点:

1) 不要在webViewDidFinishLoad中重新加载webView。而是等到主线程上的下一个运行循环(允许iOS完全完成)。在目标C中,我的代码如下所示

dispatch_async (dispatch_get_main_queue(), ^{
    // call method to load new html
});
2) 在调用webViewDidFinishLoad时,我遇到了webView无法刷新的问题。我通过调整webView框架解决了这个问题。高飞,是的。这是在iOS 6中出现的,所以我不知道这是否会产生任何影响,或者是否会影响您的工作

[webView loadHTMLString: html baseURL: nil];

// Play with frame to fix refresh problem
CGRect frame = webView.frame;
webView.frame = CGRectZero;
webView.frame = frame;

在加载另一个html之前,您可能希望清除web视图。我如何等待main上的下一个运行循环,这是我做的,但它不起作用:我调用了dispatch\u async(dispatch\u get\u main\u queue(),{从webViewDidFinishLoad…这就是你希望我做的事?是的,这似乎是我建议你尝试的。你也可以尝试我的项目#2。我没有信心,但正如我提到的,它在几年前的一个类似问题上有所帮助。