ios - 在 SpriteKit 中使用 AspectFit 显示边框外的内容

标签 ios iphone xcode swift sprite-kit

当我对与我的场景纵横比不匹配的设备使用 .AspectFit 缩放模式时,我试图显示场景边界之外的内容。我的场景是为 iPhone 5 和 6 宽高比 (1080 x 1920) 设置的,并且在黄色边界线定义的区域之外有一些测试节点:

enter image description here

白屏周围的粗红线就在边框外,除非内容是信箱,否则应该不可见。

这是我的 View Controller 中呈现场景的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    if let scene = GameScene(fileNamed:"MainMenu") {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFit
        skView.presentScene(scene)
    }
}

当我在 iPhone 6s 模拟器中运行它时,我看到了预期的结果,它只是角落里的方 block 。但是,当我在4s模拟器中运行时,我看到的不是左右红条,而是黑条:

enter image description here

当调整场景大小以适应屏幕时,我如何告诉 View Controller /应用程序使用场景内容而不是黑色空白来填充额外空间?

最佳答案

我遇到了同样的问题,并想出了一些有效的“hacky”方法。继续使用 .aspectFit 并动态调整内容的外观以匹配屏幕。

此代码假设您在 .sks 文件中使用默认的 0.5、0.5 anchor ,并且您需要将 originSize 设置为设计场景时使用的值。

任何使用此功能的人都最好为其添加一些错误检查和/或优化它,这样它就不会在每一帧上连续运行。

override func update(_ currentTime: TimeInterval) {
    // hacky resize
    do {
        let originalSize = CGSize(720, 1140)
        let winSize = self.view!.frame.size
        let originalAspect = originalSize.width/originalSize.height
        let winAspect = winSize.width/winSize.height
        var newSize = originalSize; do {
            if winAspect > originalAspect {
                newSize.width = originalSize.height * winAspect
            } else if winAspect < originalAspect {
                newSize.height = originalSize.width / winAspect
            }
        }
        self.size = newSize
        self.scaleMode = .aspectFit
    }
}

关于ios - 在 SpriteKit 中使用 AspectFit 显示边框外的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35537851/

相关文章:

ios - Xcode 4.2 iOS SDK 5 基于 View 的应用程序

ios - 如何使用2个键对数组进行排序

ios - 没有看到 20 个 I/O 周期;下载音频文件时放弃在 Swift 中发生

iphone - 如何只为 UITableViewController 启用重新排序?

iphone - 如何以编程方式在 iPhone 中创建包含字符串和图像的 .CSV 文件?

swift - 如何将异步函数的结果返回到 Swift 中的不同类

ios - AWS Auth UI 登录 - 键盘错误

ios - 应用程序退出时保存 NSUserDefaults

ios - 将 UIWebView 添加到 UIViewController 给我一个白屏。我究竟做错了什么?

ios - iOS 中 UIDatePicker 的默认日期