在iPhone X iOS 12上从屏幕底部边缘执行滑动时,我的游戏将进入后台模式。
根据Apple documentation,覆盖preferredScreenEdgesDeferringSystemGestures
并调用setNeedsUpdateOfScreenEdgesDeferringSystemGestures
应阻止应用程序进入后台,但这在iOS 12上不起作用。
我使用的是Unity3D,编辑器有Defer system gestures on edges option,它是按照苹果文档实现的,但也不起作用。
我正在Xcode 10中编译该项目。
其他人有这个问题吗?你有解决办法吗?
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中,它的工作原理是取消选中项目设置\分辨率和演示中的“状态栏隐藏”,并确保您选中项目设置\其他设置\在边缘上延迟系统手势中的至少一个边缘
4条答案
按热度按时间kyvafyod1#
移除
prefersHomeIndicatorAutoHidden
使其在Objective C中也能工作。这是一个工作示例实现,适用于遇到相同问题的任何人:
对于那些像我一样使用Unity3d的人,只需从生成的Xcode项目中的UnityViewControllerBase+iOS.mm中删除以下方法:
如果您未使用Unity,请确保
prefersHomeIndicatorAutoHidden
为NO/false。tzdcorbm2#
根据苹果的文档,
preferredScreenEdgesDeferringSystemGestures
并没有阻止应用程序进入后台,它只是让你的手势优先于系统手势,但是,如果你第二次尝试连续这样做,系统手势还是会起作用,你可以很容易地通过与其他应用程序比较来验证这一点。默认情况下,底部用于帮助向上滑动的线条为黑色,如果您不覆盖此方法,向上滑动手势将立即生效。但在您的应用中,该线条最初将显示为灰色。如果您向上滑动,它将再次变为黑色,如果您第二次向上滑动,系统手势将生效。
我把这个作为一个答案,因为有限的字符评论。
pcww981p3#
对于Swift,答案是在UIViewController中覆盖示例属性。
例如。
xpszyzbs4#
与接受的答案相同,但现在更快