Spritekit中的Scrollview以编程方式使用Swift(无故事板)

时间:2016-02-24 15:37:20

标签: ios swift uiscrollview sprite-kit

因此,我希望了解如何使用SpritekitSwift中制作图标的滚动视图(有点像菜单)。我无法找到任何不收费的好资源或教程。

我的基本应用程序设置了ViewController和我的场景。 我希望有一个滚动视图,比屏幕高度长2到3倍,我可以向上和向下滚动查看不同的图标。

我希望这是一个很好的实现,所以我可以使用x / y坐标以编程方式设置所有图标。

我的viewdidLoad:

override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    addChild(worldNode)

    //create Scrollview

    //for loop to adding icons from top to bottom of scrollview
    //name sprites

    //use touch location so allow sprites to be clickable
    //will just adjust alpha of icon for testing purposes later
}

如果你能想象的话,这就是我现在正在努力实现的目标:

scroll

我在这里看到的一些问题似乎比我想象的要详细得多,而且在这个阶段对我来说太复杂了,或者它们不是很快......

如何添加滚动视图? 提前谢谢你:)

1 个答案:

答案 0 :(得分:2)

如果您的整个用户界面是使用SpriteKit构建的场景,您可能需要考虑将其构建为带有摄像头的滚动场景。 Here's an example in a gameplay context

基本上它可以像这样工作:

var sceneCam: SKCameraNode! //declare your camera variable in your scene class

然后,在didMoveToView函数中:

sceneCam = SKCameraNode() //initialize your camera
//scaleAsPoint lets you zoom the camera in and out
sceneCam.scaleAsPoint = CGPoint(x: 0.25, y: 0.25) 

camera = sceneCam  //set the scene's camera
addChild(sceneCam) //add camera to scene

//position the camera on the scene.
sceneCam.position = CGPoint(x: frame.center.x, y: frame.center.y)

现在,在您的touchesMoved手势处理程序中,当您检测到平移时,您可以调整相机位置以匹配平移手势转换。

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
  let touch = touches.anyObject() as UITouch
  let positionInScene = touch.locationInNode(self)
  let previousPosition = touch.previousLocationInNode(self)
  let translation = CGPoint(x: positionInScene.x - previousPosition.x, y: positionInScene.y - previousPosition.y)

  sceneCam.position = CGPoint(x: sceneCam.position.x - translation.x, y: sceneCam.position.y - translation.y)
}

设置的另一个关键部分是让您的场景适合您的菜单。这与滚动视图中的内容大小类似。如果您需要,您可能还需要做一些工作来实现分页或类似的UIScrollView功能。但如果您只需要一个简单的滚动视图,就可以使用相机进行操作。

如果你只想在这个视图上使用UIKit元素,它应该只是它自己的没有场景的VC。你甚至可以创建这个菜单视图控制器并将其放在游戏场景的容器中 - 这样你在菜单vc中只使用UIKit组件,但你仍然可以在SpriteKit设置中使用它。