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

Cha*_*les 7 xcode ios swift

即使在阅读了几帧与视图相关的帖子之后,我仍然无法实现这一点.我打开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)
Run Code Online (Sandbox Code Playgroud)

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

 667.0
 375.0
 1024.0
 768.0
 667.0
 375.0
Run Code Online (Sandbox Code Playgroud)

我可以猜到前两个数字是Retina Pixel尺寸为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)
Run Code Online (Sandbox Code Playgroud)

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

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

除了缺乏知识之外,我混淆的主要原因是我在课程中看到了这个完美的例子.要么我错过了一些明显的东西?

小智 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)
    }
Run Code Online (Sandbox Code Playgroud)

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