0

更新: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

4

1 回答 1

0

在 Xcode 12 beta 6 中修复。

¯\_(ツ)_/¯ 
于 2020-08-25T20:09:43.363 回答