热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webView的图片使用图片浏览器来浏览

网页加载完成,注入js文件-(void)webViewDidFinishLoad:(UIWebView*)webView{这里是js,主要目的实现对u

网页加载完成,注入js文件

- (void)webViewDidFinishLoad:(UIWebView *)webView {
//这里是js,主要目的实现对url的获取
static NSString * const jsGetImages =
@"function getImages(){\
var objs = document.getElementsByTagName(\"img\");\
var imgScr = '';\
for(var i=0;iimgScr = imgScr + objs[i].src + '+';\
\
objs[i].onclick=function(){\
document.location=\"myweb:imageClick:\"+this.src;\
};\
};\
return imgScr;\
};"
;//这里获取网页中img标签对象
[webView stringByEvaluatingJavascriptFromString:jsGetImages];//注入js方法
NSString *urlResurlt = [webView stringByEvaluatingJavascriptFromString:@"getImages()"];
_mUrlArray = [NSMutableArray arrayWithArray:[urlResurlt componentsSeparatedByString:@"+"]];// NSLog(@"%@",_mUrlArray);
//urlResurlt 就是获取到得所有图片的url的拼接;mUrlArray就是所有Url的数组
}

然后在下面的方法里面进行处理点击图片显示的操作:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//将url转换为string
NSString *requestString = [[request URL] absoluteString];
//hasPrefix 判断创建的字符串内容是否以pic:字符开始
if ([requestString hasPrefix:@"myweb:imageClick:"]) {_imageUrl = [requestString substringFromIndex:@"myweb:imageClick:".length];//获取当前图片的url在整个链接地址中位置NSInteger index = [_mUrlArray indexOfObject:_imageUrl];if (self.bgView) {//设置不隐藏,还原放大缩小,显示图片self.bgView.hidden = NO;self.bgView.frame = CGRectMake(0, 0, WIDTH, HEIGHT);self.scrollView.contentOffset = CGPointMake(WIDTH*index, 0);} else{[self showBigImage:_mUrlArray atIndex:index];//创建视图并显示图片}return NO;
}
return YES;
}

e.g.:

#pragma mark 显示大图片
- (void)showBigImage:(NSArray *)imageUrls atIndex:(NSInteger )index{
self.bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
[self.bgView setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.7]];
[[UIApplication sharedApplication].keyWindow addSubview:self.bgView];
//创建灰色透明背景,使其背后内容不可操作
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
[self.scrollView setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.7]];
self.scrollView.delegate = self;
// 是否分页
self.scrollView.pagingEnabled = YES;
//禁止垂直滚动// self.scrollView.showsVerticalScrollIndicator = YES;
//设置分页
self.scrollView.pagingEnabled = YES;
// 设置内容大小
self.scrollView.contentSize = CGSizeMake(WIDTH*imageUrls.count,HEIGHT);
[self.bgView addSubview:self.scrollView];
//创建关闭按钮
UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[closeBtn setBackgroundImage:[UIImage imageNamed:@"close"] forState:UIControlStateNormal];
[closeBtn addTarget:self action:@selector(removeBigImage) forControlEvents:UIControlEventTouchUpInside];
[closeBtn setFrame:CGRectMake(WIDTH-50, 25, 25, 25)];
[self.bgView addSubview:closeBtn];
for (int i= 0; isetNumberOfTapsRequired:2];UIScrollView *s = [[UIScrollView alloc]initWithFrame:CGRectMake(WIDTH*i,0,WIDTH, HEIGHT)];s.bounces = NO;s.backgroundColor = [UIColor clearColor];s.contentSize =CGSizeMake(WIDTH,HEIGHT);s.delegate =self;s.minimumZoomScale =1.0;s.maximumZoomScale =3.0;// s.tag = i+1;[s setZoomScale:1.0];UIImageView *imageview = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,WIDTH, HEIGHT)];//加载图片的时候 最好设置一个网络错误的预设图片[imageview sd_setImageWithURL:imageUrls[i]];imageview.contentMode = UIViewContentModeScaleAspectFit;imageview.userInteractionEnabled =YES;imageview.tag = i+1;[imageview addGestureRecognizer:doubleTap];[s addSubview:imageview];[self.scrollView addSubview:s];
}
self.scrollView.contentOffset = CGPointMake(WIDTH*index, 0);}#pragma mark - ScrollView delegate
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{for (UIView *v in scrollView.subviews){return v;
}
return nil;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
if (scrollView ==self.scrollView){
// CGFloat x = scrollView.contentOffset.x;for (UIScrollView *s in scrollView.subviews){if ([s isKindOfClass:[UIScrollView class]]){[s setZoomScale:1.0]; //scrollView每滑动一次将要出现的图片较正常时候图片的倍数(将要出现的图片显示的倍数)}}
}
}#pragma mark - 双击图片放大的逻辑
-(void)handleDoubleTap:(UIGestureRecognizer *)gesture{
float newScale = [(UIScrollView*)gesture.view.superview zoomScale] * 1.5;//每次双击放大倍数
CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gesture locationInView:gesture.view]];
[(UIScrollView*)gesture.view.superview zoomToRect:zoomRect animated:YES];
}- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center
{
CGRect zoomRect;
zoomRect.size.height =self.view.frame.size.height / scale;
zoomRect.size.width =self.view.frame.size.width / scale;
//双击图片的时候 以整个屏幕中心为基点 调整放大后的图片的原点位置
zoomRect.origin.x = self.scrollView.center.x - (zoomRect.size.width /2.0);
zoomRect.origin.y = self.scrollView.center.y - (zoomRect.size.height /2.0);
return zoomRect;
}
- (void)removeBigImage
{
self.bgView.hidden = YES;
}



推荐阅读
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
author-avatar
郑越与焕柳的88_679
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有