很久没写博客了,今天终于闲来有时间,总结下这段时间遇到的UIWebView上的一些小技术问题。UIWebView是iOS sdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。但有时我们会遇到一个问题,就是如何实现点击webView加载的图片以放大浏览,这其中就要用到JavaScript脚本语言,这里要想进行Objective-C与JavaScript的交互操作,就需要使用oc中的
stringByEvaluatingJavaScriptFromString:方法,它的功能非常的强大,用起来非常简单,通过它我们可以很方便的操作uiwebview中的页面元素。
如何获得加载的网页内容里的图片网址呢,这里的主要代码是:
1.先给webView添加轻拍手势:
- (void)addTapOnWebView { UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; [self.contentWebV addGestureRecognizer:singleTap]; singleTap.delegate = self; }
2.设置UIGestureRecognizerDelegate代理后实现下面的方法,这个方法the default implementation returns NO,一般在一个手势接收者要阻止另外一个手势接收自己的消息的时候调用:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; }
询问delegate,两个手势是否同时接收消息,返回YES同时接收。返回NO,不同时接收。
3.实现点击webView里网页内容里的图片获取图片网址:
1 -(void)handleSingleTap:(UITapGestureRecognizer *)sender 2 { 3 CGPoint pt = [sender locationInView:self.contentWebV]; 4 NSString *imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", pt.x, pt.y]; 5 NSString *urlToSave = [self.contentWebV stringByEvaluatingJavaScriptFromString:imgURL]; 6 NSLog(@"image url=%@", urlToSave); 7 if (urlToSave.length > 0) { 8 [self showImageURL:urlToSave point:pt]; 9 } 10 }
这里注意使用到了网页脚本语言JavaScript,通过它我们可以很轻松的实现对网页内容的操作。
4.获得网址后,就是创建一个UIScrollView并将网址传进去以显示在scrollView上面了:
1 //呈现图片 2 - (void)showImageURL:(NSString *)url point:(CGPoint)point 3 { 4 ImageScrollViewController *imgScrollVC = [[ImageScrollViewController alloc] init]; 5 imgScrollVC.imgUrl = url; 6 [self.view.window.rootViewController presentViewController:imgScrollVC animated:NO completion:nil]; 7 }
具体的实现效果就是:
时间: 2024-12-15 18:25:57