1

私は次のことをしようとしています:

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 効果を使用するにはどうすればよいですか。

4

1 に答える 1

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 ];
}
于 2013-11-07T09:58:18.580 に答える