Swift Spritekit以编程方式添加Button

时间:2014-10-06 21:34:45

标签: swift

如何以编程方式添加一个按钮,该按钮会在单击时执行操作?会使用什么代码?

我习惯只在故事板中添加一个按钮并从那里运行IBAction。

5 个答案:

答案 0 :(得分:23)

在SpriteKit中添加一个按钮并响应其上的点击并不像在UIKit中那么容易。你基本上需要创建某种类型的SKNode,它会绘制你的按钮,然后检查你的场景中注册的触摸是否在该节点的范围内。

一个非常简单的场景,中间只有一个红色矩形作为按钮,看起来像这样:

class ButtonTestScene: SKScene {
    var button: SKNode! = nil

    override func didMoveToView(view: SKView) {
        // Create a simple red rectangle that's 100x44
        button = SKSpriteNode(color: SKColor.redColor(), size: CGSize(width: 100, height: 44))
        // Put it in the center of the scene
        button.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));

        self.addChild(button)
    }

    override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
        // Loop over all the touches in this event
        for touch: AnyObject in touches {
            // Get the location of the touch in this scene
            let location = touch.locationInNode(self)
            // Check if the location of the touch is within the button's bounds
            if button.containsPoint(location) {
                println("tapped!")
            }
        }
    }
}

如果您需要一个看起来像UIKit那样的动画按钮,那么您需要自己实现; SpriteKit没有内置任何东西。

答案 1 :(得分:14)

我在Swift中创建了一个类SgButton(https://github.com/nguyenpham/sgbutton)来为SpriteKit创建按钮。您可以使用图像,纹理(来自SpriteSheet),仅文本,文本和背景图像/纹理创建按钮。例如,要创建带图像的按钮:

SgButton(normalImageNamed: "back.png")

创建带纹理的按钮:

SgButton(normalTexture: buttonSheet.buy(), highlightedTexture: buttonSheet.buy_d(), buttonFunc: tappedButton)

创建圆角文本按钮:

SgButton(normalString: "Tap me", normalStringColor: UIColor.blueColor(), size: CGSizeMake(200, 40), cornerRadius: 10.0, buttonFunc: tappedButton)

答案 2 :(得分:1)

Mike S - 答案更新 - Swift 3.0

override func didMove(to view: SKView) {
        createButton()

    }

func createButton()
    {
        // Create a simple red rectangle that's 100x44
        button = SKSpriteNode(color: SKColor.red, size: CGSize(width: 100, height: 44))
        // Put it in the center of the scene
        button.position = CGPoint(x:self.frame.midX, y:self.frame.midY);

        self.addChild(button)

    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first
        let touchLocation = touch!.location(in: self)
            // Check if the location of the touch is within the button's bounds
            if button.contains(touchLocation) {
                print("tapped!")
            }

    }

答案 3 :(得分:1)

您可以使用OOButtonNode。 文本/图像按钮,Swift 4。

答案 4 :(得分:-6)

          func tappedButton(theButton: UIButton!) {
                println("button tapped")
           }
        }

上面的代码打印出按下按钮时点按的按钮。

P.S。快速的电子书是新编程语言的一个很好的指南。