2015-01-12 25 views
0

你好,我有一個SCNScene與一個精靈套件覆蓋。我也有一個只包含UISlider的子視圖。 Slider控制精靈套件疊加層中的一個SKLabel節點的值。但是,當我移動滑塊時,標籤不會更新。一旦我觸摸滑塊外部,它只會更新。所以我猜測,SCNScene和覆蓋不會更新,而我的觸摸是在子視圖中,只有當我回到主視圖時才更新。我怎樣才能解決這個問題?更新所有視圖,而UISlider正在更改

謝謝!

我的項目很快,但如果你只知道客觀的病態,我仍然感激地採取你的答案和翻譯我自己的。

SceneKit代碼:當它的修改

class MyMarbleScene: UIViewController { 
var scene: SCNScene! 
var sceneView: SCNView! 
var hud : MyMarbleSpriteKit! 


var cameraNode: SCNNode! 

override func viewDidLoad() { 
    super.viewDidLoad() 



    // create a new scene 
    scene = SCNScene() 
    sceneView = SCNView() 
    sceneView.frame = self.view.frame 
    sceneView.autoresizingMask = UIViewAutoresizing.allZeros 
    sceneView.scene = scene 
    sceneView.autoenablesDefaultLighting = false 
    sceneView.allowsCameraControl = false 
    sceneView.backgroundColor = UIColor.blackColor() 

    self.view = sceneView 

    cameraNode = SCNNode() 
    cameraNode.camera = SCNCamera() 
    scene.rootNode.addChildNode(cameraNode) 
    cameraNode.position = SCNVector3(x: 0, y: 20, z: 60) 


    hud = MyMarbleSpriteKit(size: self.view.frame.size, game: self) 
    sceneView.overlaySKScene = hud 

    let frame = CGRectMake(10.0, self.view.frame.height*0.5, 180.0, 10.0) 
    let slider = UISlider(frame: frame) 
    slider.addTarget(self, action: "sliderValueChanged:", forControlEvents: UIControlEvents.ValueChanged) 
    slider.backgroundColor = UIColor.clearColor() 
    slider.minimumValue = 1.0 
    slider.maximumValue = 10.0 
    slider.continuous = true 
    slider.value = 5 

    self.view?.addSubview(slider) 


} 

func sliderValueChanged(sender: UISlider) { 
    var currentValue = Int(sender.value) 
    println("\(currentValue)") 
    self.hud.updateLabel(currentValue) 
} 

}

SpriteKit代碼

class MyMarbleSpriteKit: SKScene { 


var myScene: MyMarbleScene! 


var SensLabelTwo = SKLabelNode() 


override func didMoveToView(view: SKView) { 

} 

init(size: CGSize, game:MyMarbleScene) { 
    super.init(size: size) 
    myScene = game 


    let SensLabel = SKLabelNode() 
    SensLabel.text = "Marble Sensitivity:" 
    SensLabel.fontName = "AvenirNext-HeavyIta" 
    SensLabel.fontSize = 40 
    SensLabel.fontColor = UIColor.whiteColor() 
    SensLabel.verticalAlignmentMode = SKLabelVerticalAlignmentMode.Top 
    SensLabel.position = CGPoint(x: 170, y: size.height-20) 
    self.addChild(SensLabel) 



    SensLabelTwo.text = "5" 
    SensLabelTwo.fontName = "AvenirNext-HeavyIta" 
    SensLabelTwo.fontSize = 60 
    SensLabelTwo.fontColor = UIColor.whiteColor() 
    SensLabelTwo.verticalAlignmentMode = SKLabelVerticalAlignmentMode.Top 
    SensLabelTwo.position = CGPoint(x: 100, y: size.height-80) 
    self.addChild(SensLabelTwo) 

} 

func updateLabel(text: Int){ 

    println("helllo") 

    SensLabelTwo.text = String(format:"%i", text) 
} 

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

} 
+0

你能告訴我們代碼嗎? – rakeshbs

+0

請參閱編輯代碼 –

回答

1

爲2D場景不會自動刷新。 您將不得不等待3D場景先被重新顯示。當3D動畫或動作正在運行或當playing設置爲YES時會發生這種情況。或者,您可以手動請求使用-[SCNView setNeedsDisplay]進行刷新。