Ios 如何将UISlider添加到非';t视图控制器的主场景

Ios 如何将UISlider添加到非';t视图控制器的主场景,ios,swift,sprite-kit,uikit,uislider,Ios,Swift,Sprite Kit,Uikit,Uislider,我正在创建一个具有一个视图控制器和多个场景的精灵工具包游戏。基本上,应用程序加载视图控制器,该控制器加载菜单场景,然后我使用SKTransitions在场景之间切换。在创建设置场景时,我希望能够使用某些UIKit元素,比如UISlider,但是,我只能让UISlider显示在场景菜单上。要使UISlider仅显示在“设置”场景中,我到底需要做什么?感谢您花时间阅读此文。因为龙骑士说,最好尽量避免在SpriteKit中使用UIKit 然而,在某些情况下,UIKit在SpriteKit中非常有用。例

我正在创建一个具有一个视图控制器和多个场景的精灵工具包游戏。基本上,应用程序加载视图控制器,该控制器加载菜单场景,然后我使用SKTransitions在场景之间切换。在创建设置场景时,我希望能够使用某些UIKit元素,比如UISlider,但是,我只能让UISlider显示在场景菜单上。要使UISlider仅显示在“设置”场景中,我到底需要做什么?感谢您花时间阅读此文。

因为龙骑士说,最好尽量避免在SpriteKit中使用UIKit

然而,在某些情况下,UIKit在SpriteKit中非常有用。例如,我使用UICollectionView在我的一个游戏中显示我的世界和级别选择菜单,因为它是最好的选项(单元重用、排队、动画效果等)

只需使用SKScene的view属性在特定场景中添加UIKit元素

class MenuScene: SKScene {

     let slider = UISlider(frame: CGRect(x: 250, y: 250, width: 280, height: 20))

     override func didMoveToView(view: SKView) {
         loadSlider()
     }

     private func loadSlider() {
         ...
         view?.addSubview(slider) // if you are calling view outside of DidMoveToView it is an optional, so use ?
     }
}
在将场景添加到GameViewController中时,不要忘记再次删除它

override func willMoveFromView(view: SKView) {
     slider.removeFromSuperview()
}

希望这能有所帮助。

我建议您自己制作滑块控件,将UIKit与SceneKit结合起来不值得这么麻烦,而且滑块控件也不难实现(请查看SKCropNode以启动它),我同意。创建一个自定义UISlider类。SpriteKit没有任何按钮,但我创建了自己的JKButtonNode,它是SKSpriteNode的子类,工作原理几乎与UIButton完全相同。在任何SprteKit游戏中都很容易实现。