当前位置: 首页 > news >正文

IOS 设置UIViewController为背景半透明浮层弹窗,查看富文本图片详情

使用场景:UIViewController1 打开 UIViewController2(背景半透明弹窗)

案例:打开富文本网页<img>图片的url查看图片详情

WKWebView  WKNavigationDelegate代理方法设置js代码点击事件 

///注册添加图片标签点击js方法
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{///js添加图片点击事件NSString *jsClickImage =@"function registerImageClickAction(){var imgs=document.getElementsByTagName('img');var length=imgs.length;for(var i=0; i < length;i++){img=imgs[i];if(\"ad\" ==img.getAttribute(\"flag\")){var parent = this.parentNode;if(parent.nodeName.toLowerCase() != \"a\")return;}img.onclick=function(){window.location.href='image-preview:'+this.src}}}";[webView evaluateJavaScript:jsClickImage completionHandler:nil];[webView evaluateJavaScript:@"registerImageClickAction()" completionHandler:nil];[webView evaluateJavaScript:@"document.body.scrollHeight" completionHandler:^(id _Nullable result,NSError *_Nullable error) {//获取webView内容高度CGFloat height = [result doubleValue];
//        [webView mas_updateConstraints:^(MASConstraintMaker *make) {
//              make.height.equalTo(@(height));
//        }];webView.frame = CGRectMake(0, 0, self.frame.size.width, height);[webView layoutIfNeeded];[webView setNeedsLayout];if (self.contentHeightCallback != nil) {self.contentHeightCallback(CGSizeMake(self.frame.size.width, height));}}];}///拦截点击图片
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{NSString *requestString = navigationAction.request.URL.absoluteString;NSString *imgKey = @"image-preview";if([requestString hasPrefix: imgKey]){NSString *url = [requestString substringFromIndex:imgKey.length+1];//查看图片详情[self showPicDetail:url];decisionHandler(WKNavigationActionPolicyCancel);return;}decisionHandler(WKNavigationActionPolicyAllow);
}

showPicDetail:()  方法打开浮窗:

-(void) showPicDetail:(NSString *)imgUrl{ShowBigPicDetailViewController *vc = [[ShowBigPicDetailViewController alloc] init];vc.imageUrl = imageUrl;//设置全屏显示   关键语句,必须有vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;[self presentViewController:vc animated:YES completion:nil];
}

设置UIViewController2 背景半透明

- (void)viewDidLoad {[super viewDidLoad];//设置半透明背景[self.view setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5f]];...
}

关闭浮窗弹窗:

[self dismissViewControllerAnimated:YES completion:nil];

相关文章:

  • Sanctuary AI旗下世界上首个采用Carbon驱动的人形通用机器人Phoenix最新演示视频
  • HarmonyOS | 状态管理(五) | @Observed装饰器和@ObjectLink装饰器
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • 【实战-08】 flink自定义Map中的变量的行为
  • 深入JVM:解析OOM的三大场景,原因及实战解决方案
  • 论文阅读NAM:Normalization-based Attention Module
  • 错误:comparison method violates its general contract
  • 智慧应急:构建全方位、立体化的安全保障网络
  • vue使用gitshot生成gif
  • 【Langchain多Agent实践】一个有推销功能的旅游聊天机器人
  • 如何在Window系统部署BUG管理软件并结合内网穿透实现远程管理本地BUG
  • SpringMVC 学习(二)之第一个 SpringMVC 案例
  • 解释什么是内连接、左连接和右连接,并给出每种连接的SQL示例
  • day03_登录注销(前端接入登录,异常处理, 图片验证码,获取用户信息接口,退出功能)
  • 【pytorch矩阵应用】
  • CSS中外联样式表代表的含义
  • Druid 在有赞的实践
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • FastReport在线报表设计器工作原理
  • golang 发送GET和POST示例
  • javascript从右向左截取指定位数字符的3种方法
  • Java编程基础24——递归练习
  • JS专题之继承
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Mysql5.6主从复制
  • Odoo domain写法及运用
  • php面试题 汇集2
  • Puppeteer:浏览器控制器
  • Sass 快速入门教程
  • Service Worker
  • Web标准制定过程
  • 关于springcloud Gateway中的限流
  • 基于组件的设计工作流与界面抽象
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​queue --- 一个同步的队列类​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​水经微图Web1.5.0版即将上线
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转载)Linux网络编程入门
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET CLR Hosting 简介
  • .NET Core 成都线下面基会拉开序幕
  • .NET gRPC 和RESTful简单对比
  • .NET 解决重复提交问题
  • .NET6 开发一个检查某些状态持续多长时间的类
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!