我在Swift 2.0中有这个类:
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(self)。但是,我似乎无法访问其他类中的视图或自我部分。我尝试用这种方式设置一些结构:
struct GlobalVariables {
static var globalGameView: SCNView = SCNView()
}
然后设置globalGameView = scnView但它不起作用。我也尝试过:
var myCustomViewController: CharacterSelectionController = CharacterSelectionController(nibName: nil, bundle: nil)
myCustomViewController.scnView.pause(myCustomViewController)
print(myCustomViewController.scnView)
但应用程序崩溃了...有什么想法吗?
答案 0 :(得分:5)
您不应尝试访问其他视图控制器的视图对象。这违反了面向对象设计的封装原则。将另一个视图控制器的视图视为私有。
您应该做的是将公共方法添加到为您执行更改的其他视图控制器,以及调用该方法。这样,如果您决定在未来的某个日期使用Metal而不是SceneKit切换视图控制器来绘制其内容,那么您可以这样做,只有您的一个视图控制器必须更改。