在Swift / IOS中获取实际视图大小

时间:2016-03-31 21:58:12

标签: ios xcode swift

即使在阅读了几帧相对于视图的帖子之后,我仍然无法实现这一点。我打开Xcode(7.3),为IOS创建一个新的游戏项目。在默认场景文件中,在addChild之后,我添加以下代码:

Cmd1.NamedParameters = True

当我为iPhone 6s运行时,我得到以下结果:

    print(self.view!.bounds.width)
    print(self.view!.bounds.height)

    print(self.frame.size.width)
    print(self.frame.size.height)

    print(UIScreen.mainScreen().bounds.size.width)
    print(UIScreen.mainScreen().bounds.size.height)

我可以猜测前两个数字是Retina Pixel尺寸为x2。我想了解为什么帧大小报告1024x768?

然后我添加以下代码来调整一个简单的背景图像以填充屏幕:

 667.0
 375.0
 1024.0
 768.0
 667.0
 375.0

我得到的图像小于屏幕尺寸。如果选择横向模式,图像会显示得更小。

我尝试将边界宽度/高度乘以两个,希望得到实际的屏幕尺寸,但随后图像变得太大。我还尝试了帧大小,使图像比屏幕稍大。

我混淆的主要原因是,除了缺乏知识之外,我在一堂课上看到了这个确切的例子。要么我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:8)

帧的格式为1024x768,因为它是以点而非像素定义的。

如果您希望场景与屏幕大小相同,则在GameViewController中显示场景之前,之前:

skView.presentScene(scene)

使用它:

scene.size = self.view.frame.size

这将使场景成为屏幕的确切大小。

然后您可以轻松地使图像像这样填充场景:

    func addBackground() {

        let bgTexture = SKTexture(imageNamed: "NAME")

        let bgSprite = SKSpriteNode(texture: bgTexture, color: SKColor.clearColor(), size: scene.size)
        bgSprite.anchorPoint = CGPoint(x: 0, y: 0)
        bgSprite.position = self.frame.origin
        self.addChild(bgSprite)
    }

此外,您可能想要了解视图边界与其边界之间的差异。