如何从UIWebView全屏显示图像?

时间:2014-03-12 07:30:57

标签: ios uiwebview

我有UIWebView来自网络显示文字和图片。

我想这样做,就像我在UIWebView中点击图像,我想在全屏显示它包括方向。

所以我测试了以下代码。

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        NSURL *URL = [request URL];

        NSData *data = [[NSData alloc] initWithContentsOfURL:URL];
        UIImageView *imageView  = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data]];

        GGFullscreenImageViewController *vc = [[GGFullscreenImageViewController alloc] init];
        vc.liftedImageView = imageView;

        [self presentViewController:vc animated:YES completion:nil];

        return NO;
    }

    else
    {
        return YES;
    }
}

当我点击UIWebView中的图片时,它无效并显示错误。

2014-03-12 13:59:40.397 MMSP[1368:a0b] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [0 0; nan nan]'
*** First throw call stack:

有没有像我上面所说的那样做?

2 个答案:

答案 0 :(得分:1)

a)我认为你应该为GGFullscreenImageViewController设置框架

b)一般情况下(不要与你的崩溃有关),我认为你应该使用[[NSData alloc] initWithContentsOfURL:URL];此时加载图像。在点击链接时,它会等到图像下载完毕,然后显示,导致“延迟”。为您的用户。

相反,只需将URL移交给您的GGFullscreenImageViewController,视图控制器,并让它显示活动指示器,直到它下载图像为止。

答案 1 :(得分:1)

如果您的UIImageView已经设置了GGFullscreenImageViewController,那么为什么不创建UIImage并分配,而不是创建新的UIImageView。分配新创建的实例时,liftedImageView中的图像视图实例将丢失。

就这样做,

NSData *data = [[NSData alloc] initWithContentsOfURL:URL];
GGFullscreenImageViewController *vc = [[GGFullscreenImageViewController alloc] init];
vc.liftedImageView.image = [UIImage imageWithData:data];

理想情况下,您应该通过提供GGFullscreenImageViewController方法将图片网址传递给initWithUrl:。下载图像异步,或者您可以使用开源代码执行此操作,例如:SDWebImage

希望这有帮助!