所以我用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
}
}
我做错了什么?
答案 0 :(得分:0)
您已将滚动视图(Scroller
)定义为(隐式展开)可选项。一个可选的说,有一个值,它等于x,或者根本没有值。您必须使用可选绑定以安全的方式访问可选的值。在隐式展开的可选变量(scrollView!vs scrollView?)的情况下,就像在你的情况下一样,没有必要使用可选绑定来有条件地解包可选(因为它将在被访问时隐式解包),但你必须采取在你尝试使用它时,要注意变量不是零。
这里,Scroller
可能是零,因为您似乎没有实际创建UIScrollView
的实例(或者至少在您的代码中看不到)。
在访问其属性之前,您需要创建UIScrollView
的实例:
Scroller = UIScrollView(frame: view.bounds)
可以注意到的另一件事是您使用unarchiveFromFile
函数来创建场景。这是“旧的”方式,您必须确保在SKNode上的自定义扩展中定义了此功能(因为在Xcode 7中,在默认的SpriteKit游戏模板项目中无法再找到此扩展名。)
此外,使用viewWillLayoutSubviews
时请注意可以多次调用它。
提示:类名应大写,而变量应以小写字母开头。