如何旋转 SpriteView?
How to rotate a SpriteView?
UPDATE: The SpriteView
rotation will work in a simulator, but not on a real device (in my case an iPhone 11 with iOS 14b3). See @Asperi comment. ¯_(ツ)_/¯
SpriteView
: A SwiftUI view that renders a SpriteKit scene.
好的
首先,快乐之路。下面的 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)
}
}
}
符合预期:
太棒了。
现在,当我尝试对 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
已在 Xcode 12 beta 6 中修复。
¯\_(ツ)_/¯
UPDATE: The
SpriteView
rotation will work in a simulator, but not on a real device (in my case an iPhone 11 with iOS 14b3). See @Asperi comment. ¯_(ツ)_/¯
SpriteView
: A SwiftUI view that renders a SpriteKit scene.
好的
首先,快乐之路。下面的 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)
}
}
}
符合预期:
太棒了。
现在,当我尝试对 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
已在 Xcode 12 beta 6 中修复。
¯\_(ツ)_/¯