背景:打开的文章H5能不能点击放大图片预览 并且保存啊?
首先我们需要获取到 用户点击的范围所在的 图片
那么我们可以做一个WKWebView 来专门处理这个事情。
WKWebView (Images)
-(void) addTapImageGesture
{
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction:)];
tapGesture.numberOfTapsRequired = 1;
tapGesture.delegate = (id)self;
[self addGestureRecognizer:tapGesture];
}
//这里增加手势的返回,不然会被WKWebView拦截
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
-(void) tapGestureAction:(UITapGestureRecognizer *)recognizer
{
//首先要获取用户点击在WKWebView 的范围点
CGPoint touchPoint = [recognizer locationInView:self];
NSString *imgURLJS = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", touchPoint.x, touchPoint.y];
//跟着注入JS 获取 异步获取结果
[self evaluateJavaScript:imgURLJS completionHandler:^(id result, NSError * _Nullable error) {
if (error == nil)
{
NSString *url = result;
if (url.length == 0)
{
return ;
}
else
{
//如果是url 则转换成 UIImage
NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
UIImage *clickImg = [UIImage imageWithData:imgData];
if (clickImg)
{
NSArray *imgArr = @[url];
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
[tempArray addObject:clickImg];
//将图片 存起来 ,然后可以放到 预览控件里面去了
[self setImgUrlArrayKey:[tempArray copy]];
//to do 这里就可以将图片放在你想要放在的 图片预览控件里面了
}
}
}
}];
}
最后我们可以在 WKWebView 的 delegate 加载完成的 回调里面增加使用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
[self.webView addTapImageGesture];
}