Ios iPhone-X-如何强制用户滑动两次主屏幕指示器以返回主屏幕

Ios iPhone-X-如何强制用户滑动两次主屏幕指示器以返回主屏幕,ios,ios11,iphone-x,Ios,Ios11,Iphone X,我正在使用下面的代码隐藏iPhoneX上的home指示器,它在模拟器中运行良好 -(BOOL)prefersHomeIndicatorAutoHidden { return YES; } 但即使它是隐藏的,我仍然能够从底部向上滑动,我的游戏进入主屏幕 我看过一些游戏,用户必须向上滑动一次才能打开主屏幕指示灯,然后再次向上滑动才能进入主屏幕 那么,在iOS 11中,如何使用Objective-C强制用户滑动主屏幕指示器两次以进入主屏幕呢 这种行为是全屏游戏所必需的。它是隐藏和延迟之间的选

我正在使用下面的代码隐藏iPhoneX上的home指示器,它在模拟器中运行良好

-(BOOL)prefersHomeIndicatorAutoHidden
{
    return YES;
}
但即使它是隐藏的,我仍然能够从底部向上滑动,我的游戏进入主屏幕

我看过一些游戏,用户必须向上滑动一次才能打开主屏幕指示灯,然后再次向上滑动才能进入主屏幕

那么,在iOS 11中,如何使用Objective-C强制用户滑动主屏幕指示器两次以进入主屏幕呢


这种行为是全屏游戏所必需的。

它是隐藏和延迟之间的选择,但不是两者都有

-(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]; 
并定义HandleTesture,无需为此做任何事情

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

    NSLog(@"gestured");
}

应该是这样的

将以下内容添加到ViewController中对我起了作用:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    return UIRectEdgeBottom;
}
这使得Home指示器更加透明和不活动,因此需要额外的滑动才能离开游戏

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

I

preferredscreenedges延迟系统手势必须被覆盖并返回
UIRectEdgeBottom

Swift 4.2 这对我很有用:

-(bool)首选ShomeIndicator自动隐藏{
返回否;
}

是的,我也忘了。虽然如果PreferShomeIndicator或AutoHidden返回“是”,但它的行为仍然不正确,我感到惊讶的是,它会允许您在没有注册的情况下延迟接收延迟通知,但“但不是两者”需要强调。值得注意的是,您可以返回。如果您想限制所有手势,就像从顶部向下滑动到指挥中心一样。
override var prefersHomeIndicatorAutoHidden: Bool {
  return false
}

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
  return UIRectEdge.bottom
}