【问题标题】:How to proper set up a UIButton in SKScene如何在 SKScene 中正确设置 UIButton
【发布时间】:2015-11-09 17:49:40
【问题描述】:

我在我的场景/视图中设置了一个 UIButton,当 ViewController 调用场景时,该按钮会显示。问题是当我单击按钮并调用我的 GameScene 时,按钮仍然存在。我想我设置按钮的方式有误。
我想问题是我无法在我的startGame 函数中调用button1 上的removeFromSuperview() 函数。

我该如何解决这个问题?任何帮助表示赞赏!

import Foundation
import SpriteKit
import UIKit

class MenuScene: SKScene {


    override init(size: CGSize) {

        super.init(size: size)

        backgroundColor = SKColor.grayColor()

        let label = SKLabelNode(fontNamed: "CourierNewPS-BoldMT")
        label.text = "Start Game"
        label.fontSize = 40
        label.fontColor = SKColor.blackColor()
        label.position = CGPoint(x: size.width/2, y: size.height/2)
        addChild(label)
    }


    override func didMoveToView(view: SKView) {

        let button1=UIButton(frame: CGRectMake(size.width/2, size.height/2, 300, 100))
        button1.backgroundColor = UIColor.greenColor()
        button1.setTitleColor(UIColor.blackColor(), forState: .Normal)
        button1.setTitle("Unfocused", forState: .Normal)
        button1.setTitle("Start", forState: .Focused)
        button1.addTarget(self, action: "startGame:", forControlEvents: UIControlEvents.PrimaryActionTriggered)

        self.view?.addSubview(button1)
    }



    func startGame(sender:UIButton) {
        let gameView = view! as SKView
        gameView.ignoresSiblingOrder = true

        let reveal = SKTransition.flipHorizontalWithDuration(0.2)
        let scene = GameScene(size: self.size)
        gameView.presentScene(scene, transition:reveal)

    }


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

【问题讨论】:

    标签: swift uibutton skscene tvos skview


    【解决方案1】:

    您可以通过startGame(sender:UIButton) 方法使用sender 访问您的button1 对象。在这种情况下,它是对button1 的引用。您可以从中调用removeFromSuperview 方法:

    func startGame(sender:UIButton) {
        let gameView = view! as SKView
        gameView.ignoresSiblingOrder = true
    
        let reveal = SKTransition.flipHorizontalWithDuration(0.2)
        let scene = GameScene(size: self.size)
        gameView.presentScene(scene, transition:reveal)
    
        sender.removeFromSuperview()
    }
    

    【讨论】:

    • 哈,就是这样。非常感谢!哦,如果我有另一个按钮怎么办 - 我将如何删除它们。 sender.removeFromSuperview() 在这里不起作用,因为另一个 Button 不是发件人。
    • 找到了我上面贴的问题的答案。我只需要在 MenuScene 类中定义按钮。
    猜你喜欢
    • 2015-09-12
    • 2013-10-05
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多