Ios SpriteKit,Swift 2.0-Scrollview给我一个错误
因此,我用init()更新了代码,并使用了可选绑定,正如您所说,它已停止向我提供错误,但现在在我运行模拟时它甚至不会显示,这是什么原因 我还需要它出现在一个不同的场景,叫做菜单,我想知道我是怎么做到的Ios SpriteKit,Swift 2.0-Scrollview给我一个错误,ios,swift,uiscrollview,swift2,Ios,Swift,Uiscrollview,Swift2,因此,我用init()更新了代码,并使用了可选绑定,正如您所说,它已停止向我提供错误,但现在在我运行模拟时它甚至不会显示,这是什么原因 我还需要它出现在一个不同的场景,叫做菜单,我想知道我是怎么做到的 import UIKit import SpriteKit class GameViewController: UIViewController { var scrollView: UIScrollView! convenience init() { self.init() i
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
}
}
我做错了什么?您已将滚动视图(
滚动器
)定义为(隐式展开的)可选视图。一个可选选项表示,有一个值,它等于x,或者根本没有值。您必须使用可选绑定以安全的方式访问可选的值。在隐式展开可选变量(scrollView!vs scrollView?)的情况下,就像在您的情况下一样,不需要使用可选绑定来有条件地展开可选变量(因为它在访问时将隐式展开),但您必须注意,在尝试使用它时,该变量不是零
在这里,Scroller
可能为零,因为您似乎还没有实际创建UIScrollView
的实例(或者至少在代码中看不到)
在访问其属性之前,需要创建UIScrollView
的实例:
Scroller = UIScrollView(frame: view.bounds)
可以注意到的另一件事是,您正在使用unarchiveFromFile
函数创建场景。这是一种“旧”方法,您必须确保已在SKNode上的自定义扩展中定义了此函数(因为在Xcode 7中,在默认的SpriteKit游戏模板项目中再也找不到此扩展)
另外,当使用viewWillLayoutSubviews
时,请注意它可以被多次调用
提示:类名应大写,而变量应以小写字母开头。您好,我对编码还不熟悉,您能用更简单的术语解释一下吗?我只是还没有掌握所有的编程术语。@Astrum简言之,在尝试访问Scroller变量(或其属性)之前,您必须确保Scroller变量不是nil。我该如何检查它?(我一周前才开始编程)如果是nill,我将如何修复它?@Astrum使用可选绑定,如果让tempVar=optionalVar{…}或optionalVar!=nil{/…在这里使用强制展开}但除此之外,似乎您不明白在使用对象之前必须初始化它。如果您是初学者,您必须从基本的OOP概念开始,如类、对象、初始化和变量。然后转到Swift特定的东西,如期权。等等,然后你可以跳进去,使用UIKit元素,比如UIScrollView。嗨,你能再次阅读我的问题吗,因为我已经用新代码更新了它,还有一些关于它的问题。