更新:
SpriteView
旋转将在模拟器中工作,但不能在真实设备上工作(在我的情况下是带有 iOS 14b3 的 iPhone 11)。请参阅@Asperi 评论。¯_(ツ)_/¯
SpriteView
:渲染 SpriteKit 场景的 SwiftUI 视图。
好的。
第一,幸福之路。下面Rectangle
将旋转得很好:
import SwiftUI
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
var body: some View {
GeometryReader { geometry in
// Rectangle test (rotates just fine)
Rectangle()
.fill(Color.red)
.frame(width: geometry.size.width / 2, height: geometry.size.height / 2)
}
}
}
正如预期的那样:
伟大的。
现在,当我尝试对 a 做同样的事情时SpriteView
:
import SwiftUI
import SpriteKit
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
var body: some View {
GeometryReader { geometry in
SpriteView(scene: createSKScene(with: geometry.size))
.frame(width: geometry.size.width / 2, height: geometry.size.height / 2)
}
}
func createSKScene(with size: CGSize) -> SKScene {
let scene = SKScene()
scene.backgroundColor = UIColor.blue
scene.scaleMode = .resizeFill
return scene
}
}
视图不会旋转。
很明显我错过了一些东西。你知道我错过了什么吗?
现在有一件非常好奇的事情......
只需添加这一行:let scene = SKScene()
...视图将简单地停止旋转。
import SwiftUI
import SpriteKit
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
// By adding this line, views won't rotate anymore. ???
let scene = SKScene()
var body: some View {
GeometryReader { geometry in
// Now the rectangle will NOT rotate anymore.
Rectangle()
.fill(Color.red)
.frame(width: geometry.size.width / 2, height: geometry.size.height / 2)
}
}
}
这让我发疯!
Xcode:12.0 测试版 3
iOS:14 测试版 3