给UIWebView添加图片点击事件

  今天公司要求在店铺详情里添加图片点击事件,即让图片可以放大缩小。原本觉得在上家公司做过这个,没什么难得,没想到接手这个APP用的UIWebView来展示图片,顿时让我一脸懵逼,由于自己之前没怎么接触过这个与H5的交互。折腾了好久,幸亏最后还是弄出来了。废话不多说了,进入正题!!!!

总的分两步

1.获取点击的图片地址
2.展示出来

1.获取点击的图片的地址

先遵守UIWebViewDelegate,然后在

- (void)webViewDidFinishLoad:(UIWebView *)webView{}

收集JS页面传来的图片以及添加图片点击事件,代码如下:

#pragma mark -- wsx 收集JS页面传来的图片及添加图片点击事件
-(void)getImagesFromJSAndClickImgEvent:(UIWebView *)webView{
    //这里是JS,主要目的: - 获取H5图片的url
    static  NSString * const jsGetImages =
    @"function getImages(){\
    var objs = document.getElementsByTagName(\"img\");\
    var imgScr = '';\
    for(var i=0;i

最后你就可以在

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {}

实现图片的放大缩小等操作,具体代码如下:

#pragma mark -UIWebViewDelegate
//在这个方法中捕获到图片的点击事件和被点击图片的url
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    //预览图片
    if ([request.URL.scheme isEqualToString:@"image-preview"]) {
        NSString* clickedImgURL = [request.URL.absoluteString substringFromIndex:[@"image-preview:" length]];
        clickedImgURL = [clickedImgURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//path 就是被点击图片的url
        NSInteger count = 0;//计数变量
        for (NSString *imgURL in showImageList) {
            //比对数组中的图片URL与选定图片的URL
            NSArray *arrFirst = [imgURL componentsSeparatedByString:@"/"];
            NSArray *arrSecond = [clickedImgURL componentsSeparatedByString:@"/"];
            if ([[arrFirst lastObject] isEqualToString:[arrSecond lastObject]]) {
#pragma mark -图片点击20171011
                [XLPhotoBrowser showPhotoBrowserWithImages:showImageList currentImageIndex:count];
                return NO;
            }
            count ++;
        }
        return NO;
    }
    return YES;
}

XLPhotoBrowser的使用具体我就不多讲了,想要了解的话,可以参考iOS图片浏览器 - XLPhotoBrowser(类似微信多图片浏览效果)
由于我们公司的服务器那传来的数据是这样的:

content = "


";

所以我自己写了个方法把里面的图片地址提取出来,代码如下:

#pragma mark -截取图片字符串
-(NSArray *)interceptPhotoArrFromString:(NSString *)str
{
    NSMutableArray *imageNamesMut = [NSMutableArray array];
    NSArray *contentArray = [str componentsSeparatedByString:@" "];
    for (NSString *string in contentArray) {
        NSRange rang = [string rangeOfString:@"="];
        if (rang.location != NSNotFound) {
            NSArray *arr = [string componentsSeparatedByString:@"="];
            if ([[arr firstObject] isEqualToString:@"src"]) {
                NSMutableString *mutStr = [NSMutableString stringWithString:[arr lastObject]];
                NSString *imageName = [mutStr stringByReplacingOccurrencesOfString:@"\"" withString:@""];
                [imageNamesMut addObject:imageName];
            }
        }
    }
    return imageNamesMut;
}

  以上是我今天重新弄得图片浏览器事件,比较麻烦的还是那个图片地址的获取和点击UIWebView获取当前点击图片的地址,毕竟我们可以直接使用XLPhotoBrowser这个第三方,只要传入图片数组和点击的下标,一行代码就可以实现。写的虽然不怎样,不过还是希望这些能帮助到别人,如果有什么好的修改,麻烦提出来,谢谢!!!
参考文献:
iOS 获取Web图片并添加点击事件

你可能感兴趣的:(给UIWebView添加图片点击事件)