gpt4 book ai didi

swift - SpriteKit 中的 safeAreaInsets 问题

转载 作者:行者123 更新时间:2023-11-28 07:53:39 25 4
gpt4 key购买 nike

我正在开发一款游戏,现在我注意到它在 iPhone X 上看起来不像我预期的那样。我需要在 右上角 上放置一个标签,在 iPhone X 上标签根本没有显示。所以我阅读了有关 Safe Area 的内容并想出了这个解决方案:

游戏 View Controller :

override func viewDidLoad() {
super.viewDidLoad()

self.view.setNeedsLayout()
self.view.layoutIfNeeded()
self.view.layoutSubviews()
}

override func viewDidLayoutSubviews() {
print("viewDidLayoutSubviews")
print(self.view.safeAreaInsets.top)
print(self.view.safeAreaInsets.bottom)
}

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

let scene = GameScene(size: view.bounds.size)
let skView = view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
scene.scaleMode = .resizeFill
skView.presentScene(scene)
}

在我的 GameScene 中,我在用户执行此操作时

override func didMove(to view: SKView) {
var label = SKLabelNode()
if let safeAreaInsets = self.view?.safeAreaInsets {
var y: CGFloat = 0.0
if safeAreaInsets.top == 0.0 { iPhone SE, 6/7/8, Plus
y = self.frame.height - 10
} else { // iPhone X
y = frame.maxY - safeAreaInsets.top - 5
}
label.position = CGPoint(x: self.frame.width -100, y: y)
}

label.text = "Highscore: 0"
label.zPosition = 5
}

关于此的两个问题:

1:

这可行,但我真的需要检查 safeAreaInsets.top == 0.0 是否需要为 iPhone X 使用 safeAreaInsets 吗?安全区域不应该是同一部手机吗?

2:为了能够获得 safeAreaInsets,我需要调用 self.view.setNeedsLayout()、self.view.layoutIfNeeded()、self.view.layoutSubviews()(可能不是全部,而是其中一些)。如果我不使用它,所有 safeAreaInsets 始终为 0.0。这是为什么?

最佳答案

   private func safeAreaInsets() -> UIEdgeInsets {
if #available(iOS 11.0, *) {
return UIApplication.shared.windows.first?.safeAreaInsets ?? .zero
} else {
return .zero
}
}

关于swift - SpriteKit 中的 safeAreaInsets 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48943391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com