iPhone-X - 如何强制用户滑动两次主页指示器进入主屏幕
Posted
技术标签:
【中文标题】iPhone-X - 如何强制用户滑动两次主页指示器进入主屏幕【英文标题】:iPhone-X - How to force user to swipe twice home indicator to go home-screen 【发布时间】:2017-11-17 09:36:40 【问题描述】:我正在使用下面的代码隐藏 iPhone X 上的主页指示器,它在模拟器中运行良好。
-(BOOL)prefersHomeIndicatorAutoHidden
return YES;
但即使它被隐藏了,我仍然可以从底部向上滑动,然后我的游戏就会进入主屏幕。
我见过一些游戏,用户必须向上滑动一次才能调出主页指示器,然后再次向上滑动才能进入主屏幕。
那么,在 ios 11 中,如何通过 Objective-C 强制用户滑动主页指示器两次以转到主屏幕?
全屏游戏需要此行为。
【问题讨论】:
【参考方案1】:我had the same problem。
PrefersHomeIndicatorAutoHidden
必须返回 NO,但 PreferredScreenEdgesDeferringSystemGestures
必须被覆盖并返回 UIRectEdgeBottom
。
斯威夫特 4.2
override var prefersHomeIndicatorAutoHidden: Bool
return false
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge
return UIRectEdge.bottom
【讨论】:
值得注意的是,如果你想限制所有手势,比如从顶部向下滑动到命令中心,你可以返回 .all。【参考方案2】:将以下内容添加到 ViewController 对我来说很有效:
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
return UIRectEdgeBottom;
这使得主页指示器更加透明和不激活,因此需要额外滑动才能离开游戏。
您还可以使用UIRectEdgeAll
代替UIRectEdgeBottom
来延迟屏幕所有边缘的系统手势。
【讨论】:
是的,也忘记了那个。虽然如果 prefersHomeIndicatorAutoHidden 返回“是”,它的行为仍然不正确,但我很惊讶它会让您推迟而不注册接收延迟通知【参考方案3】:这是隐藏和延迟之间的选择,但不能同时选择
-(BOOL)prefersHomeIndicatorAutoHidden
// YES for hidden (but swipe activated)
// NO for deferred (app gets priority gesture notification)
return NO;
在 viewDidLoad 中注册手势
UIScreenEdgePanGestureRecognizer *sePanGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
sePanGesture.edges = UIRectEdgeAll;
// or just set the bottom if you prefer, top-right seems to behave well by default
[self.view addGestureRecognizer:sePanGesture];
并定义handleGesture,无需为此做任何事情
- (void)handleGesture:(UIScreenEdgePanGestureRecognizer *)recognizer
// to get location where the first touch occurred from docs
// CGPoint location = [recognizer locationInView:[recognizer.view superview]];
NSLog(@"gestured");
应该是的
【讨论】:
“但不能同时强调”【参考方案4】:这对我有用:
-(bool) prefersHomeIndicatorAutoHidden
return NO;
【讨论】:
以上是关于iPhone-X - 如何强制用户滑动两次主页指示器进入主屏幕的主要内容,如果未能解决你的问题,请参考以下文章
我可以在初始加载视图时旋转 tableview UIRefreshControl(活动指示器),而无需用户向下滑动吗?