为什么iOS 7.1和iOS 8之间的SpriteKit场景/视图坐标不同?

3
我正在探究iOS 8 beta版本中的SpriteKit,并将我的项目部署目标设置为iOS 7,以便在运行发布的iOS 7.1的iPad Air上进行测试。
我发现在模拟器(运行iOS 8)和我的设备(运行iOS 7.1)之间,我的SKScene和它的SKView之间的坐标不一致。以下是我用来隔离这种不一致性的代码:
从iOS SpriteKit游戏模板开始,我修改了设置,只支持横屏向右方向,并将以下代码添加到GameScene类中:
class GameScene: SKScene {

    

    var scaleFromView: CGPoint!

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */
        label = SKLabelNode(fontNamed:"Chalkduster")
        label.text = "Hello, World!";
        label.fontSize = 65;
        label.position = CGPoint(x:0.0, y:0.0);
        label.zPosition = -1.0

        let referencePt = CGPoint(x: 100, y: 100)
        var viewPt = convertPointToView(CGPoint(x: 0, y: 0))
        viewPt = viewPt + referencePt
        let scenePt = convertPointFromView(viewPt)
        scaleFromView = scenePt / referencePt
        println("  view.bounds is \(view.bounds)")
        println("   scene.size is \(scene.size)")
        println("scaleFromView is \(scaleFromView)")

        world.addChild(label)
    }

    

请注意,这里使用了我为处理 CGPoint 定义的一些运算符:
@infix func + (a: CGPoint, b: CGPoint) -> CGPoint {
    return CGPoint(x: a.x + b.x, y: a.y + b.y)
}

@infix func - (a: CGPoint, b: CGPoint) -> CGPoint {
    return CGPoint(x: a.x - b.x, y: a.y - b.y)
}

@infix func * (a: CGPoint, b: CGPoint) -> CGPoint {
    return CGPoint(x: a.x * b.x, y: a.y * b.y)
}

@infix func / (a: CGPoint, b: CGPoint) -> CGPoint {
    return CGPoint(x: a.x / b.x, y: a.y / b.y)
}

在任何iOS 8模拟器(包括iPad Air模拟器)下运行时,println语句会记录日志(根据场景和视图边界设置的预期结果)。
  view.bounds is (0.0,0.0,1024.0,768.0)
   scene.size is (1024.0,768.0)
scaleFromView is (1.0,-1.0)

但是当我在我的设备上运行它时,我却得到了以下错误信息:
  view.bounds is (0.0,0.0,768.0,1024.0)
   scene.size is (1024.0,768.0)
scaleFromView is (0.75,-0.75)

因此,似乎该视图没有正确反映它处于横向方向。为什么会发生这种情况呢?
附注:我已经下载了iOS 7.1模拟器,并且现在可以报告它们与设备一致。也就是说,这似乎是iOS 7.1的一个错误/特性。

你的意思是不一致性存在于iOS 8而不是7.1,对吗?通常,当skview在viewDidLoad中创建而不是viewWillLayoutSubviews时,会发生坐标混乱,但不确定如何应用于Swift / iOS 8。 - CodeSmile
@LearnCocos2D:抱歉我表述不清。这种不一致性发生在iOS 7.1上,但在iOS 8上没有。我正在使用来自Xcode 6 beta的SpriteKit游戏模板,因此当nib被加载时创建了SKView - Kaelin Colclasure
1个回答

1
在下载和安装模拟器后,我能够确定它们的行为与设备一致。也就是说,它们还是报告视图边界view.bounds反映纵向而不是横向模式,尽管(或许是因为)我的应用程序仅支持横向模式。这似乎是的一个错误/特性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接