如何让我的精灵套件场景出现在UIView上方?

时间:2015-05-15 02:44:19

标签: ios objective-c uiview uiimageview sprite-kit

我已经做了一些搜索,但没有发现任何直接解决我的问题:我有一个SKScene,其中有几个SKNodes,每个SKSpriteNode个对象用于我的游戏,我就是使用背景UIImageView(我需要用背景做一些事情,用sprite工具包无法合理完成 - 至少据我所知);我遇到的问题是UIImageView出现在一切之上,我看不到我的游戏对象。

在我的视图控制器(.m文件)中,我有以下代码来调用我的场景

@implementation GameViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    SKView * skView = (SKView *)self.view;

     SKScene * scene = [GameScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    [skView presentScene:scene];

}

在上面的GameScene中,我有几个SKNodes我的所有游戏对象都是其中的孩子(例如nodeHDUnodePlaynodePauseMenu .. 。),我使用UIImageView作为我的背景(我随着时间的推移在背景场景之间切换,并且使用UIViewAnimationOptionTransitionCrossDissolve;等一些不错的过渡无法通过SKSpriteNode实现此目的作为背景,不使用多个SKSpriteNodes和错综复杂的SKActions数组,因此我使用UIImageView

UIView *backgrounds = [[UIView alloc] init];
[self.view insertSubview:backgrounds belowSubview:self.view];

UIImageView *imageBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
[backgrounds addSubview:imageBackground];
[backgrounds sendSubviewToBack:imageBackground];
[imageBackground setImage:[UIImage imageNamed:@"1-A.png"]];
imageBackground.alpha=1.0;

但是,上面ImageBackground是我在Xcode中运行应用时唯一看到的内容。我的游戏中的其他对象(其他节点的子节点)存在,各种NSLog语句被调用,但它们似乎出现在ImageBackground后面。 “belowSubview”和“sendSubviewToBack”上面的代码没有帮助。

那么如何将imageBackground发送给实际的背景?

1 个答案:

答案 0 :(得分:2)

您的问题在于您直接将SKView设置为控制器视图。要克服此问题,请不要将self.view作为SKView的类型。在故事板或Xib中执行以下步骤:

  1. 首先在控制器视图上添加UIImageView。同时设置图像。
  2. 然后在SKView上添加UIImageView并将UIClearColor设置为背景颜色。
  3. 因此,完整的层次结构就像UIViewController - > UIView - > UIImageView - > SKView