2016-01-12 5 views
-1

у меня есть этот класс в Swift 2.0:объекта Access UI от другого класса Swift

class CharacterSelectionController: UIViewController { 
    @IBOutlet weak var scrollView: UIScrollView! 
    @IBOutlet weak var scnView: SCNView! 

    var characterArray = [CharacterInfo]() 
    var scene: CharacterScene! 

    override func viewDidLoad() { 

     // Set up the SCNView 
     scnView.backgroundColor = AppDelegate().lightBlueColor() 
     scnView.showsStatistics = false 
     scnView.antialiasingMode = SCNAntialiasingMode.Multisampling2X 
     scnView.overlaySKScene = SKScene(size: view.bounds.size) 
     scnView.playing = false 

     // Start playing the scene 
     scnView.scene = scene 
     scnView.scene!.rootNode.hidden = false 
     scnView.play(self) 

В AppDelegate и другие классы, я должен установить scnView сделать паузу, что-то вроде scnView.pause (сам). Однако, похоже, я не могу получить доступ к представлению или собственной части в другом классе. Я попытался установить структуру таким образом:

struct GlobalVariables { 
    static var globalGameView: SCNView = SCNView() 
} 

, а затем установить globalGameView = scnView, но он не работает. Я также пробовал:

var myCustomViewController: CharacterSelectionController = CharacterSelectionController(nibName: nil, bundle: nil) 
    myCustomViewController.scnView.pause(myCustomViewController) 
    print(myCustomViewController.scnView) 

но приложение падает ... Любые идеи?

ответ

5

Нельзя пытаться получить доступ к объектам представления другого вида контроллера. Это является нарушением принципа инкапсуляции объектно-ориентированного дизайна. Относитесь к другим представлениям диспетчера вида как к приватным.

Что вы должны сделать, это добавить открытый метод к другому контроллеру представления, который внесет изменения для вас, и вызов этого метода. Таким образом, если вы решите переключить свой контроллер представления, чтобы нарисовать его содержимое, используя Metal вместо SceneKit, в какой-то будущий день, вы можете это сделать, и только ваш один контроллер просмотра должен измениться.

Смежные вопросы