如何以编程方式添加一个按钮,该按钮会在单击时执行操作?会使用什么代码?
我习惯只在故事板中添加一个按钮并从那里运行IBAction。
答案 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。快速的电子书是新编程语言的一个很好的指南。