这是我和#34;分享"的代码。按钮:
ShareButton = UIButton(frame: CGRect(x: 0, y:0, width: view.frame.size.width / 3, height: 60))
ShareButton.center = CGPointMake(CGRectGetMidX(self.frame), 3*CGRectGetHeight(self.frame)/4)
ShareButton.setTitle("Share", forState: UIControlState.Normal)
ShareButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
ShareButton.addTarget(self, action: ("pressed:"), forControlEvents: .TouchUpInside)
self.view?.addSubview(ShareButton)
PS:我的分享按钮有效但当用户分享他的分数并想再次播放时,分享按钮会出现在游戏场景中。
答案 0 :(得分:3)
制作SpriteKit游戏时的第一条规则是尝试不使用UIKit。 应使用SpriteKit API(SKLabelNodes,SKSpriteNodes,SKNodes等)直接在SKScenes中创建所有UI。 有一些例外,比如可能使用UICollectionViews进行大规模的级别选择菜单,但基本的UI不应该使用UIKit来完成。
所以你应该使用SKSpriteNodes制作你的按钮并将它们直接添加到你想要的SKScene。
有很多关于如何做到这一点的谷歌教程,一个简单的就是这个
https://nathandemick.com/2014/09/buttons-sprite-kit-using-swift/
更完整的一个查看苹果样本游戏" DemoBots"或者在gitHub上查看这些很酷的项目。
https://github.com/nguyenpham/sgbutton
https://github.com/jozemite/JKButtonNode
在SpriteKit游戏中,你只有1个视图控制器(GameViewController),它将呈现你所有的SKScenes(GameScene,MenuScene等)。如果您使用UIKit元素,它们会被添加到GameViewController中,因此它们将显示在所有场景中(例如您的分享按钮)。
self.view?.addSubview(shareButton) // self.view is your GameViewController
如果您的游戏拥有超过1个SKScene和相当多的按钮,那么这将是疯狂的管理。
另一方面,如果您使用SpriteKit API,并且因为当您输入时,每个SKScene都以干净的状态启动,您不必担心这一点。
如果您坚持使用UIKit,则必须在转换到游戏场景之前移除或隐藏共享按钮,然后取消隐藏或在需要时再次添加。
shareButton.isHidden = true
或
shareButton.removeFromSuperview()
最后,作为良好的做法,您的属性应该以小写字母而不是大写字母开头
shareButton = ...
希望这有帮助
答案 1 :(得分:2)
如上所述,您应该尝试不使用UIKit作为UIKit应用程序,而不是游戏。
您可以使用我的JKButtonNode课程来创建按钮。类文件是正确的here。最好的部分是它们与SpriteKit完全兼容,因为它们由SKTexture和SKLabelNode组成。
首先,在班级的顶层创建按钮。
var shareButton: JKButtonNode?
然后在您的didMoveToView或您配置按钮的任何位置。 (除了init方法在初始化之前调用类本身的函数不起作用)输入以下内容。
let shareButtonBackground = SKShapeNode(rect: CGRect(x: 0, y: 0, width: view.frame.size.width / 3, height: 60))
shareButton = JKButtonNode(title: "Share", background: SKView().textureFromNode(shareButtonBackground)!, action: shareButtonAction)
shareButton?.title.fontColor = UIColor.whiteColor()
shareButton?.canChangeState = false
shareButton?.canPlaySounds = false
addChild(shareButton!)
您将收到错误,因为您没有声明按钮的操作,但只是将其添加到您班级的任何位置。
func shareButtonAction(button: JKButtonNode) {
print("The share button has been pressed.")
}
这些按钮的工作方式与UIButtons类似。如果你愿意,他们甚至可以改变状态。当然,当您不想显示它时,只需将其从父项中删除即可。您还可以使其更具可定制性;只看我给你的第一个链接。示例截图。您也可以通过调用setTitleProperties来更改标题属性。