iPhone-X - 如何强制用户刷两次家用指示灯进入主屏幕

smi*_*tel 10 ios ios11 iphone-x

我正在使用下面的代码隐藏iPhone X上的主页指示器,这在模拟器中工作正常.

-(BOOL)prefersHomeIndicatorAutoHidden
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

但即使它被隐藏了,我仍然可以从底部向上滑动,我的游戏进入主屏幕.

我已经看过几个游戏,用户必须向上滑动一次以调出家庭指示器并再次向上滑动以进入主屏幕.

那么,如何强制用户滑动主页指示两次以使用Objective-C转到iOS 11的主屏幕?

全屏游戏需要此行为.

fil*_*ilo 10

遇到了同样的问题.

PrefersHomeIndicatorAutoHidden必须返回NO但PreferredScreenEdgesDeferringSystemGestures必须被覆盖并返回UIRectEdgeBottom.

Swift 4.2

override var prefersHomeIndicatorAutoHidden: Bool {
  return false
}

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
  return UIRectEdge.bottom
}
Run Code Online (Sandbox Code Playgroud)


小智 5

将以下内容添加到ViewController为我做了诀窍:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    return UIRectEdgeBottom;
}
Run Code Online (Sandbox Code Playgroud)

这使得家庭指示器更加透明和不活动,因此需要额外的滑动才能离开游戏.

您也可以使用UIRectEdgeAll而不是UIRectEdgeBottom在屏幕的所有边缘上推迟系统手势.


dan*_*hik 4

这是隐藏和延迟之间的选择,但不能两者兼而有之

-(BOOL)prefersHomeIndicatorAutoHidden
{
    // YES for hidden (but swipe activated)
    // NO for deferred (app gets priority gesture notification)
    return NO;  
}
Run Code Online (Sandbox Code Playgroud)

在 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]; 
Run Code Online (Sandbox Code Playgroud)

并定义handleGesture,不需要做任何事情就可以工作

- (void)handleGesture:(UIScreenEdgePanGestureRecognizer *)recognizer {
    // to get location where the first touch occurred from docs
    // CGPoint location = [recognizer locationInView:[recognizer.view superview]]; 

    NSLog(@"gestured");
}
Run Code Online (Sandbox Code Playgroud)

应该是这样

  • 需要强调“但不是两者” (2认同)