Кнопка Swift Spritekit Adding программно

Как программно добавить кнопку, которая будет запускать действие при нажатии? Какой код будет использоваться?

Я привык просто добавлять кнопку в раскадровку и запускать IBAction.

Добавление кнопки в 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 ничего не встроено.

Я создал class SgButton ( https://github.com/nguyenpham/sgbutton ) в Swift для создания кнопок для 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) 

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, 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!") } } 

Вы можете использовать OOButtonNode . Кнопки текста / изображения, Swift 4.

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

Вышеприведенный код выводит кнопку, постучавшую при нажатии кнопки.

PS быстрая книга – действительно хорошее руководство для нового языка программирования.

  • почему я получаю «Должен переводить авторезистирующую маску в ограничения, чтобы иметь _setHostsLayoutEngine: YES» в xcode 6 beta
  • Обтекатель объектных объектов Swift в apple / swift
  • Нелегко реализовать простой синглтон в быстрой
  • Выход NSTask в режиме реального времени в NSTextView с Swift
  • Как изменить текстовое представление, отображаемое для типа в Swift?
  • Быстрые переменные украшения с надписью «?» (Вопросительный знак) и «!» (Восклицательный знак)
  • Почему .pch-файл недоступен в swift?
  • Как разрешить «неоднозначное использование» ошибки компиляции с синтаксисом Swift #selector?
  • Swift: как вернуть значение в асинхронную функцию URL-адреса?
  • Noop для отчетов об исчерпывающих коммутаторах Swift
  • Есть ли способ установить связанные объекты в Swift?
  • Давайте будем гением компьютера.