从iPhone X iOS 12的底部边缘向上滑动时,停止应用程序进入后台

时间:2018-10-09 08:46:33

标签: objective-c xcode unity3d ios12

在iPhone X iOS 12上从屏幕底部边缘滑动时,我的游戏进入了背景模式。

根据Apple documentation覆盖setNeedsUpdateOfScreenEdgesDeferringSystemGestures并调用- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear: animated]; [self setNeedsUpdateOfHomeIndicatorAutoHidden]; [self setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; } - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { return UIRectEdgeAll; } - (BOOL)prefersHomeIndicatorAutoHidden { return YES; } 可以阻止应用程序进入后台,但这在iOS 12上不起作用。

我正在使用Unity3D,并且编辑器具有Defer system gestures on edges option ,该功能已按照Apple文档进行了实现,但也无法正常工作。

我正在Xcode 10中编译项目。

其他人有这个问题吗,您有解决办法吗?

PS:我正在一个空的单视图iOS项目中对此进行测试,唯一添加的代码如下:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    if #available(iOS 11.0, *){
        setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
    }
}

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
    return [.all];
}
}

更新:事实证明,如果我使用快速实现,它会起作用。太糟糕了,我无法对Unity3D 2017生成的项目执行此操作。

<preference name="phonegap-version" value="cli-8.0.0" />
<preference name="DisallowOverscroll" value="true" />

2 个答案:

答案 0 :(得分:1)

根据Apple文档,preferredScreenEdgesDeferringSystemGestures不会阻止应用程序进入后台,它只是使您的手势优先于系统手势。 但是,如果您尝试第二次连续进行,则系统手势将起作用。您可以通过与其他应用进行比较轻松地验证这一点。

默认情况下,有助于向上滑动的底部线条为黑色,如果不覆盖此方法,向上滑动手势将立即生效。但是在您的应用程序中,该行最初会显示为灰色。如果向上滑动,它将再次变黑;如果再次向上滑动,则系统手势将起作用。

由于评论的字符有限,我将此作为答案。

答案 1 :(得分:0)

删除prefersHomeIndicatorAutoHidden使其也可以在目标C中工作。

这是可行的示例实现,适用于遇到相同问题的任何人:

- (void)viewDidLoad {
    [super viewDidLoad];

    if (@available(iOS 11.0, *)) { 
      [self setNeedsUpdateOfScreenEdgesDeferringSystemGestures];
    }
 }

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    return UIRectEdgeAll;
}

对于像我一样使用Unity3d的用户,只需从生成的Xcode项目中的UnityViewControllerBase + iOS.mm中删除以下方法即可:

- (BOOL)prefersHomeIndicatorAutoHidden
{
    return YES;
}