从SKScene推送到视图控制器

时间:2013-11-06 08:05:48

标签: uiviewcontroller sprite-kit

我正在尝试执行以下操作:

SKTransition *reveal = [SKTransition pushWithDirection:SKTransitionDirectionDown duration:0.5];
SKView *skv = (SKView *)self.view.window.rootViewController.view;
[self.view presentScene:skv.scene transition:reveal];

但它不起作用,我得到一个SIGABRT错误。我可以用什么来获得相同的效果。我可以使用dismissViewController但是我如何使用pushWithDirection效果。

1 个答案:

答案 0 :(得分:0)

我不完全确定你为什么要推送到视图控制器。如果您只想转换到新场景,可以在场景中执行此操作,而无需靠近父视图控制器:

    YourScene *nextScene = [[YourScene alloc] initWithSize:self.size];
    SKTransition *reveal = [SKTransition pushWithDirection:SKTransitionDirectionDown duration:3.0];
    [self.view presentScene:nextScene transition:reveal];

如果您确实想从视图控制器中调用它,可以将视图控制器添加为场景中的属性:

#import "YourViewController.h"

@property (nonatomic,weak) YourViewController *viewController;

在设置初始场景时的视图控制器中,将视图控制器分配给该属性:

yourScene.viewController = self;

然后,在场景中,您可以在视图控制器上调用方法:

[viewController yourMethod];

是:

//YourViewController.h
#import "YourScene.h"

...

-(void)yourMethod;


//YourViewController.m

...

-(void)yourMethod
{
    YourScene *nextScene = [[YourScene alloc] initWithSize:self.size];
    nextScene.viewController = self;
    SKTransition *reveal = [SKTransition pushWithDirection:SKTransitionDirectionDown duration:3.0];
    [yourSKView presentScene:nextScene transition:doors ];
}