Ipad项目中用到的UIModalPresentationFormSheet,点击阴影部分dismiss 当前presented的controller
这个文章学到的知识:
http://my.oschina.net/CreeveLiu/blog/347913?fromerr=Pg3JEnxF
背景:
xcode:Ver 7.0 sdk:9.0
1>IPAD项目
2>在一个大的controller(mainViewController)中推出一个小的controller(aViewController).
3>推出viewController的代码大意如下:
aViewController.modalPresentationStyle = UIModalPresentationFormSheet;
aViewController.preferredContentSize = CGSizeMake(self.view.frame.size.width / 2,self.view.frame.size.height/ 2);
[mainViewController presentViewController:aViewController animated:YES completion:nil];
效果如下:其中绿色的是aViewController , 白色的背景是mainViewController
--------------------------------------------------
需求:
想要点击绿色以外的阴影部分让这个controller dismiss掉。
但是All uncovered areas are dimmed to prevent the user from interacting with them.
(所有不被覆盖的阴影部分是阻止用户交互的,也就是绿色以外的部分)
--------------------------------------------------
解决方法:
给 被弹出的viewController 中加入以下方法(例子中的 aViewController)
Link: http://my.oschina.net/CreeveLiu/blog/347913?fromerr=Pg3JEnxF
以下内容是从链接中copy过来的,深拷贝哟(玩笑:))。怕以后链接失效。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
_tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
[_tapRecognizer setNumberOfTapsRequired:1];
_tapRecognizer.cancelsTouchesInView = NO; //So the user can still interact with controls in the modal view
[self.view.window addGestureRecognizer:_tapRecognizer];
[_tapRecognizer setDelegate:(id<UIGestureRecognizerDelegate>)self];
}
- (void)handleTapBehind:(UITapGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateEnded) {
// passing nil gives us coordinates in the window
CGPoint location = [sender locationInView:nil];
// swap (x,y) on iOS 8 in landscape
if (SYSTEM_VERSION_MORE_THAN_8) {
if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
location = CGPointMake(location.y, location.x);
}
}
// convert the tap's location into the local view's coordinate system, and test to see if it's in or outside. If outside, dismiss the view.
if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil]) {
// remove the recognizer first so it's view.window is valid
[self.view.window removeGestureRecognizer:sender];
[self dismissViewControllerAnimated:YES completion:nil];
}
}
}
#pragma mark - UIGestureRecognizer Delegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return YES;
}
现在点击阴影部分就可以dismiss了。
--------------------------------------------------
总结:
不加手势的代理方法 是添加不上手势的,FromSheet样式可能是默认禁掉了手势的代理,所以重写一下就好用了。(因为用起来没什么bug,
所以这个原因没仔细研究,先暂时这么理解吧)
--------------------------------------------------
Ipad项目中用到的UIModalPresentationFormSheet,点击阴影部分dismiss 当前presented的controller相关推荐
- IDEA为java项目中用到python的模块设置Python interpreter
IDEA为java项目中用到python的模块设置Python interpreter Java项目中模块用到了python,没有为模块设置Python解释器,因此点击右上角Configure Pyt ...
- 在项目中用ts封装axios
写在前面 虽然说Fetch API已经使用率已经非常的高了,但是在一些老的浏览器还是不支持的,而且axios仍然每周都保持2000多万的下载量,这就说明了axios仍然存在不可撼动的地位,接下来我们就 ...
- iOS 项目中用到的一些开源库和第三方组件
iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...
- iOS:项目中用到的Cookie
1.介绍: 做了这么长时间开发,Cookie真是用的不多,可是现在不一样了,这次的项目我用到了Cookie.其实,Cookie的使用在项目中愈加的频繁,一般情况下,提供的接口是用Cookie来识别用户 ...
- yaml for java_细数Java项目中用过的配置文件(YAML篇)
灵魂拷问:YAML,在项目中用过没?它与 properties 文件啥区别? 目前 SpringBoot.SpringCloud.Docker 等各大项目.各大组件,在使用过程中几乎都能看到 YAML ...
- python能调用身份证读卡器吗_最近的项目中用到读卡器,用的华视身份证阅读器,附上SDK使用手册...
最近的项目中用到读卡器,用的华视身份证阅读器,附上SDK使用手册 1.定义 应用函数开发包含下列文件: termb.dll API函数的动态联接库 sdtapi.dll 内部动态库 ...
- 国外短链接项目。一万次点击220美刀
大家好,我是四点 一个混迹在互联网上赚钱的人 未来十年一路同行 "国外短链接项目" 今天四点给大家分享一个国外短网址赚钱项目,这是一个点击短链接就可以挣美刀的网站,宣称万次播放最高 ...
- iOS项目中用到的一些第三方库
今天来总结一下项目中用到的一些第三方库. 1. AFNetworking,在github上有3万多颗的星星,用作处理网络请求. 2. MZGuidePages, 这是一个小工具,用于创建首次使用app ...
- 高薪程序员面试题精讲系列96之分库分表了解吗?你项目中用到过吗?怎么用的?
一. 面试题及剖析 1. 今日面试题 分库分表了解吗? 有哪些分库分表的实现方案? 你项目中用到过分库分表吗?怎么用的? 数据库有没有进行过分区? 2. 题目剖析 现在我们出去面试时的现状,真的很贴合 ...
- 解决:Flarum完整项目拉取到本地点击任何链接都弹出“请求资源不存在”(报404)
解决:Flarum完整项目拉取到本地点击任何链接都报404 public文件夹下缺少.htaccess文件,如下即为.htaccess文件内容,复制内容到文件中并命名为.htaccess,将文件放在p ...
最新文章
- 【springboot】入门
- ovirt官方安装文档 附录F
- 构建Chua 混沌电路 - 基本测试
- Selenium-switch_to_window出现删除线
- linux 往文件写4k大小,[svc]为何linux ext4文件系统目录默认大小是4k?
- java登录界面命令_Java命令行界面(第5部分):JewelCli
- python获取pid并杀死_用python记录运行pid,并在需要时kill掉它们的实例
- java 对象复制字段_利用Java反射机制实现对象相同字段的复制
- UITableView 编辑和删除行
- python中装饰函数的使用:
- CenterNet :Objects as Points/CenterTrack:Tracking Objects as Points
- jemalloc java_jemalloc源码结构分析
- MySql 使用关键字做字段名
- Python 破解 MD5 暗号
- 关于四阶魔方中心块还原
- 正则:\b 匹配出一个单词的小天使
- OPPO R8107刷机包下载_OPPO R8107密码忘记了?点击进来搞定
- Makefile文件
- 人工智能写作如何应用于法律文书撰
- Electron打包React构建桌面应用
热门文章
- 删除顺序表中区间内的元素
- html如何设置banner,css设置banner图自适应的方法
- Easy Connect 当前IE代理启用了自动配置脚本,不允许使用CS客户端登录
- C#利用JScript自动计算字符串公式方法
- 树莓派无法获取ipv6公网地址和dns解析失败的问题
- 一家椰子鸡店,凭什么让客户去了一趟又一趟?到底有什么样的魔力?
- 汽车ECU的bootloader程序设计
- ECU Bootloader自学笔记
- 桌面计算机地址栏在哪,我的电脑地址栏不见了怎么办 地址栏不见了如何解决...
- Gis到底可以应用在哪些方面?