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

8
即使我读了几篇有关frame和view的文章,我仍然无法使它工作。我打开Xcode(7.3),为iOS创建一个新的游戏项目。在默认的场景文件中,在addChild之后,我添加了以下代码:
    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)

我运行 iPhone 6s 后得到了以下结果:
 667.0
 375.0
 1024.0
 768.0
 667.0
 375.0

我猜前两个数字是Retina像素大小的x2。我想了解为什么帧大小报告为1024x768?

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

    self.anchorPoint = CGPointMake(0.5,0.5)

    let theTexture = SKTexture(imageNamed: "intro_screen_phone")
    let theSizeFromBounds = CGSizeMake(self.view!.bounds.width, self.view!.bounds.height)
    let theImage = SKSpriteNode(texture: theTexture, color: SKColor.clearColor(), size: theSizeFromBounds)

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

我尝试将边界宽度/高度乘以二,希望获得实际屏幕尺寸,但这样图像会变得太大。我还尝试了框架大小,使图像略大于屏幕。

除了缺乏知识之外,我困惑的主要原因是,我在一节课上看到了这个完美运作的例子。我可能错过了一些明显的东西或者?

1个回答

9

该框架的尺寸为1024x768,因为它是以点(points)为单位定义的,而不是像素(pixels)。

如果您想让场景与屏幕大小相同,在场景在您的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)
    }

此外,您可能希望了解视图边界和框架之间的区别。

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