从 iPhone X iOS 12 的底部边缘向上滑动时停止应用进入后台
Stop app going to background when swiping up from bottom edge on iPhone X iOS 12
我的游戏在 iPhone X iOS 12.
上执行从屏幕底部边缘滑动时进入后台模式
根据 Apple documentation 覆盖 preferredScreenEdgesDeferringSystemGestures
并调用 setNeedsUpdateOfScreenEdgesDeferringSystemGestures
应该会阻止应用程序进入后台,但这不适用于 iOS 12.
我正在使用 Unity3D,编辑器有 Defer system gestures on edges option ,它是根据苹果文档实现的,但也不起作用。
我在Xcode10.
编译项目
还有其他人遇到这个问题吗?你有解决办法吗?
PS:我正在一个空的单视图 iOS 项目中对此进行测试,唯一添加的代码如下:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear: animated];
[self setNeedsUpdateOfHomeIndicatorAutoHidden];
[self setNeedsUpdateOfScreenEdgesDeferringSystemGestures];
}
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
return UIRectEdgeAll;
}
- (BOOL)prefersHomeIndicatorAutoHidden
{
return YES;
}
更新:事实证明,如果我使用 swift 实现,它就可以工作。太糟糕了,我无法为 Unity3D 2017 生成的项目执行此操作。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 11.0, *){
setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
}
}
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
新更新:在 Unity 2019 中,它通过在项目 Stttings\Resolution 和演示文稿中取消选中“隐藏状态栏”并确保在项目 Settings\Other Settings\Defer 中至少选中一个边缘来工作边缘系统手势
根据苹果文档,preferredScreenEdgesDeferringSystemGestures
不会阻止应用程序进入后台,它只是让您的手势优先于系统手势。
但是,如果您尝试连续第二次执行此操作,系统手势就会起作用。您可以通过与其他应用程序进行比较来轻松验证这一点。
默认情况下,底部有助于向上滑动的线条是黑色的,如果您不覆盖此方法,向上滑动手势将立即起作用。但在您的应用程序中,该行最初看起来是灰色的。如果你向上滑动,它会再次变黑,如果你再次向上滑动,系统手势就会起作用。
由于评论字符有限,我将此作为答案。
删除 prefersHomeIndicatorAutoHidden
使其在 Objective 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;
}
我的游戏在 iPhone X iOS 12.
上执行从屏幕底部边缘滑动时进入后台模式根据 Apple documentation 覆盖 preferredScreenEdgesDeferringSystemGestures
并调用 setNeedsUpdateOfScreenEdgesDeferringSystemGestures
应该会阻止应用程序进入后台,但这不适用于 iOS 12.
我正在使用 Unity3D,编辑器有 Defer system gestures on edges option ,它是根据苹果文档实现的,但也不起作用。
我在Xcode10.
编译项目还有其他人遇到这个问题吗?你有解决办法吗?
PS:我正在一个空的单视图 iOS 项目中对此进行测试,唯一添加的代码如下:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear: animated];
[self setNeedsUpdateOfHomeIndicatorAutoHidden];
[self setNeedsUpdateOfScreenEdgesDeferringSystemGestures];
}
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
return UIRectEdgeAll;
}
- (BOOL)prefersHomeIndicatorAutoHidden
{
return YES;
}
更新:事实证明,如果我使用 swift 实现,它就可以工作。太糟糕了,我无法为 Unity3D 2017 生成的项目执行此操作。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 11.0, *){
setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
}
}
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
新更新:在 Unity 2019 中,它通过在项目 Stttings\Resolution 和演示文稿中取消选中“隐藏状态栏”并确保在项目 Settings\Other Settings\Defer 中至少选中一个边缘来工作边缘系统手势
根据苹果文档,preferredScreenEdgesDeferringSystemGestures
不会阻止应用程序进入后台,它只是让您的手势优先于系统手势。
但是,如果您尝试连续第二次执行此操作,系统手势就会起作用。您可以通过与其他应用程序进行比较来轻松验证这一点。
默认情况下,底部有助于向上滑动的线条是黑色的,如果您不覆盖此方法,向上滑动手势将立即起作用。但在您的应用程序中,该行最初看起来是灰色的。如果你向上滑动,它会再次变黑,如果你再次向上滑动,系统手势就会起作用。
由于评论字符有限,我将此作为答案。
删除 prefersHomeIndicatorAutoHidden
使其在 Objective 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;
}