2014-07-08 21 views
1

我是很新的iOS開發,並且我正在使用的UIKit按鈕和雪碧套件爲virtual joystick的應用程序。我的目標是有一個UIImageView的上方顯示的按鈕和操縱桿(更具體地說,MotionJpegImageView)。我用了一個故事創造的按鈕,編程創建一個UIImageView並將其添加爲一個子視圖我的主視圖在我的視圖控制器。遊戲杆是在SKScene子類的獨立文件中創建的。但是,有一個問題。我的UIImageView顯示在按鈕下方(根據需要),但覆蓋了操縱桿。我需要操縱桿在圖像頂部可見。我已經嘗試了sendSubviewToBack方法,但這並沒有實現。我也嘗試過使用zPositions,但那也行不通。有誰知道我可以如何實現我的目標?相關代碼如下。感謝您的期待!的UIKit + SpriteKit - 不能正確層按鈕,節點和圖像視圖

ViewController.m

- (void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    NSURL *url = [NSURL URLWithString:@"http://shibuya.ipcam.jp:60001/nphMotionJpeg?Resolution=320x240&Quality=Standard"]; 

    _imageView = [[MotionJpegImageView alloc] initWithFrame:CGRectMake(self.view.frame.origin.y, self.view.frame.origin.x, 
                     [[UIScreen mainScreen] bounds].size.height,[[UIScreen mainScreen] bounds].size.width)]; 

    _imageView.url = url; 

    [self.view addSubview:_imageView]; 

    [self.view sendSubviewToBack:_imageView]; 

    [_imageView play]; 

    SKView *spriteView = (SKView *) self.view; 

    JoystickScene* joystick = [[JoystickScene alloc] initWithSize:CGSizeMake(768,1024)]; 

    [spriteView presentScene: joystick]; 

    [self.view bringSubviewToFront:spriteView]; 
} 

JoystickScene.m

- (void)didMoveToView: (SKView *) view 
{ 
    SKSpriteNode *jsThumb = [SKSpriteNode spriteNodeWithImageNamed:@"joystick.png"]; 

    SKSpriteNode *jsBackdrop = [SKSpriteNode spriteNodeWithImageNamed:@"dpad.png"]; 

    joystick = [Joystick joystickWithThumb:jsThumb andBackdrop:jsBackdrop]; 

    joystick.position = CGPointMake(jsBackdrop.size.width, jsBackdrop.size.width); 

    velocityTick = [CADisplayLink displayLinkWithTarget:self selector:@selector(joystickMovement)]; 

    [velocityTick addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 

    joystick.zPosition = 1; 

    [self addChild:joystick]; 

} 

回答

0

的spritekit SKView是你的ViewController的看法。每個子視圖都將被渲染。是否有一個特殊的原因,你想使用Spritekit的遊戲杆?否則,我會建議使用標準的UIKit元素,並將其添加到imageView之後。 上的其他視圖頂端使用SKView不會給你想要的結果,因爲它不能有一個透明背景。

您的代碼的另一個問題:您不應在viewWillLayoutSubviews中創建和添加視圖,因爲此方法可以多次調用(例如每個設備旋轉)。改爲使用viewDidLoad

+0

我只使用SpriteKit,因爲我找不到使用UIKit的操縱桿實現。呵呵,謝謝,我會使用的viewDidLoad代替:) – woodenstick

+0

其實,沒關係;我想我找到了一個UIKit的操縱桿的作品:https://github.com/MattFoley/MFLJoystick – woodenstick