我正在尝试执行以下操作:
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效果。
答案 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 ];
}