【问题标题】:iPhone-X - How to force user to swipe twice home indicator to go home-screeniPhone-X - 如何强制用户滑动两次主页指示器进入主屏幕
【发布时间】:2017-11-17 09:36:40
【问题描述】:

我正在使用下面的代码隐藏 iPhone X 上的主页指示器,它在模拟器中运行良好。

-(BOOL)prefersHomeIndicatorAutoHidden
{
    return YES;
}

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

我见过一些游戏,用户必须向上滑动一次才能调出主页指示器,然后再次向上滑动才能进入主屏幕。

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

全屏游戏需要此行为。

【问题讨论】:

    标签: ios ios11 iphone-x


    【解决方案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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      相关资源
      最近更新 更多