App界面防止呼出控制中心、通知中心方法

场景

一些页面中有手势交互,难免存在这些手势和系统手势重叠的情况。例如,页面中有一个从下向上滑的手势,当在屏幕边缘触发时,则会呼出控制中心而不是响应页面中的手势。

方法

主要需要在控制器中实现两个方法。

第一个是- (BOOL)prefersStatusBarHidden,当返回YES时,呼出控制/通知中心的手势触发时,不会马上弹出控制/通知中心界面,而是在屏幕中出现一个灰色箭头,用户需要再次拖拽箭头才会出现对应的控制界面。

Jietu20180118-104745.jpg

然而,如果只实现这个方法,手势触发时,页面依然没有响应。区别只是直接出现控制中心界面,还是需要额外的一个拖拽。所以就需要实现另一个方法。

第二个方法- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures API_AVAILABLE(ios(11.0)),控制屏幕的四个边缘,哪个边缘的手势触发时,会延迟系统手势。默认为UIRectEdgeNone, 即系统手势优先。

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures {
    return UIRectEdgeAll;
}

实现后,对应的屏幕边缘的手势触发,会优先相应App页面的手势,然后出现系统灰色箭头。

系统页面

当去Apple Store诊断电池时,会打开设置-隐私-分析-开始诊断apple,此时出现的诊断页面,完全无法呼出控制中心、通知中心(上划或下滑时,连灰色箭头都不会出现),当在诊断中时,甚至Home键的点击都会被拦截,用户按Home键均会提示是否停止诊断,因此这个页面中也无法进行截图。

IMG_2377.jpg

参考: Is it possible to disable Control Center in iOS 7 programmatically and if not, what are alternatives?

推荐阅读更多精彩内容