2015-06-09 3 views
0

Я хочу получить доступ к переменной за пределами ее области. (Откроется фрагмент соответствующего кода). Внутри @IBAction функция sphereNode.runAction (moveUp) не распознается.Использование переменной вне ее области

Я не могу просто объявить сферуNode глобальным, поскольку он зависит от объявления сферы.

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Added our first shape = sphere 
    let sphereGeometry = SCNSphere(radius: 1.0) 
    let sphereNode = SCNNode(geometry: sphereGeometry) 
    sphereNode.position = SCNVector3Make(0, 0, 0) 
    sphereGeometry.firstMaterial!.diffuse.contents = UIColor.redColor() 
    sphereGeometry.firstMaterial!.specular.contents = UIColor.whiteColor() 
    scene.rootNode.addChildNode(sphereNode) 
} 

@IBAction func animateButton(sender: AnyObject) { 
    let moveUp = SCNAction.moveByX(0.0, y: 1.0, z: 0.0, duration: 1.0) 
    sphereNode.runAction(moveUp) 
} 

} `

Начинающий программист так пожалуйста, простые объяснения оценили - спасибо заранее.

ответ

1

Что вам нужно здесь, это переменная экземпляра.

Переменные не могут использоваться вне их сферы действия (и в конечном итоге вы узнаете, что это действительно замечательная вещь). Но мы можем расширить сферу нашей переменной:

class YourViewController: UIViewController { 
    var sphereNode: SNNode? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //Added our first shape = sphere 
     let sphereGeometry = SCNSphere(radius: 1.0) 
     self.sphereNode = SCNNode(geometry: sphereGeometry) 
     self.sphereNode?.position = SCNVector3Make(0, 0, 0) 
     sphereGeometry.firstMaterial!.diffuse.contents = UIColor.redColor() 
     sphereGeometry.firstMaterial!.specular.contents = UIColor.whiteColor() 
     scene.rootNode.addChildNode(sphereNode) 
    } 

    @IBAction func animateButton(sender: AnyObject) { 
     let moveUp = SCNAction.moveByX(0.0, y: 1.0, z: 0.0, duration: 1.0) 
     self.sphereNode?.runAction(moveUp) 
    } 
} 
Смежные вопросы