将视图控制器相互传递或确保仅启动它们一次

时间:2014-01-31 13:01:35

标签: ios objective-c uiviewcontroller sprite-kit

我发现自己的情况如下。

在AppDelegate中,我需要能够访问我在后面的视图控制器中创建的SKView,以便我可以在进入后台时暂停SKView。我知道能够做到这一点的唯一方法是在AppDelegate中创建SKView,然后在我稍后用作属性的视图控制器中设置它。缺点是,在我首先创建之前,我不存在该视图。因此,我正在做以下事情。

@property (nonatomic, strong) SKView *skView;
.
.
.
self.skView = [[SKView alloc] init];
SceneViewController *svc = [[SceneViewController alloc] initWithNibName:nil bundle:nil];
[svc setSkview:self.skView];

在SceneViewController中我有

@property (nonatomic, strong) IBOutlet SKView *skview;

我遇到的问题是,我是否真的对IBOutlet的财产有强烈的设定?还有一种比这更好的方法来做我正在做的事情。

我也以同样的方式将SceneViewController传递给另一个视图控制器,这样它也可以获得对它的引用,以允许它在适当的时候呈现视图。我认为上述问题的答案对此也有帮助。

3 个答案:

答案 0 :(得分:1)

为什么不在拥有UIApplicationWillResignActiveNotification的视图控制器中监听SKView并暂停呢?

答案 1 :(得分:0)

理想情况下,您应该使用委托在2个视图控制器之间进行通信,而不是相互保持参考,请参阅协调视图控制器... https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW1

答案 2 :(得分:0)

让单身人士确保只有一个班级。

+(SKView *)singleton 
{
    static SKView *shared = nil;

    if(shared == nil) 
    {
        shared = [[SKView alloc] init];
    }

    return shared;
}