SpriteKit,Swift 2.0 - Scrollview给我一个错误

时间:2015-12-28 13:13:50

标签: ios swift uiscrollview swift2

所以我用init()更新了代码并使用了可选的绑定,因为你已经停止给我错误但是现在它甚至不会出现在我运行模拟时,这是什么原因造成的?

此外,我需要它出现在一个名为Menu的不同场景中,并想知道我是怎么做到的?

import UIKit
import SpriteKit

class GameViewController: UIViewController {

var scrollView: UIScrollView!


convenience init() {

    self.init()

if let tempVar = (scrollView) {

    print("hello world")

}

else if scrollView != nil {

    print("hello")

  }

}

 override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene(fileNamed:"GameScene") {
        // Configure the view.

        let skView = self.view as! SKView

        skView.showsFPS = true
        skView.showsNodeCount = true
        self.view.multipleTouchEnabled = true
        // skView.showsPhysics = true

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill
        scene.size = skView.bounds.size
        skView.presentScene(scene)

        scrollView = UIScrollView(frame: view.bounds)
        scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 400)

      }

}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    self.scrollView!.frame = self.view.bounds
    self.scrollView!.contentSize.height = 0
    self.scrollView!.contentSize.width = 400

}

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return .AllButUpsideDown
    } else {
        return .All
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
}

override func prefersStatusBarHidden() -> Bool {
    return true
  }

}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您已将滚动视图(Scroller)定义为(隐式展开)可选项。一个可选的说,有一个值,它等于x,或者根本没有值。您必须使用可选绑定以安全的方式访问可选的值。在隐式展开的可选变量(scrollView!vs scrollView?)的情况下,就像在你的情况下一样,没有必要使用可选绑定来有条件地解包可选(因为它将在被访问时隐式解包),但你必须采取在你尝试使用它时,要注意变量不是零。

这里,Scroller可能是零,因为您似乎没有实际创建UIScrollView的实例(或者至少在您的代码中看不到)。

在访问其属性之前,您需要创建UIScrollView的实例:

 Scroller = UIScrollView(frame: view.bounds)

可以注意到的另一件事是您使用unarchiveFromFile函数来创建场景。这是“旧的”方式,您必须确保在SKNode上的自定义扩展中定义了此功能(因为在Xcode 7中,在默认的SpriteKit游戏模板项目中无法再找到此扩展名。)

此外,使用viewWillLayoutSubviews时请注意可以多次调用它。

提示:类名应大写,而变量应以小写字母开头。