iPhone-X - How to force user to swipe twice home indicator to go home-screen

╄→гoц情女王★ 提交于 2019-12-31 22:20:52

问题


I'm using the code below to hide the home indicator on iPhone X, which is working fine in the emulator.

-(BOOL)prefersHomeIndicatorAutoHidden
{
    return YES;
}

But even though it's hidden, I am still able to swipe up from the bottom and my game goes to the home screen.

I have seen a few games where the user has to swipe up once to bring up the home indicator and swipe up again to go to the home screen.

So, how can I force the user to swipe the home indicator twice to go to the home screen in iOS 11 with Objective-C?

This behavior is required for full-screen games.


回答1:


I had the same problem.

PrefersHomeIndicatorAutoHidden must return NO but also PreferredScreenEdgesDeferringSystemGestures must be overridden and return UIRectEdgeBottom.

Swift 4.2

override var prefersHomeIndicatorAutoHidden: Bool {
  return false
}

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
  return UIRectEdge.bottom
}



回答2:


Adding the following to the ViewController did the trick for me:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    return UIRectEdgeBottom;
}

This made the Home Indicator more transparent and inactivated so that it requires an extra swipe in order to leave the game.

You can also use UIRectEdgeAll instead of UIRectEdgeBottom to defer the system gestures on all edges of the screen.




回答3:


It is a choice between hidden and deferred but NOT both

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

register the gesture in 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]; 

and define the handleGesture, no need to do anything there for this to work

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

    NSLog(@"gestured");
}

should be it



来源:https://stackoverflow.com/questions/47347403/iphone-x-how-to-force-user-to-swipe-twice-home-indicator-to-go-home-screen

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!