我有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:
有没有像我上面所说的那样做?
答案 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
。
希望这有帮助!