在SKSpriteKit中创build可滚动表的正确方法是什么?

我需要一种方式来显示排行榜 – 最好的用户分数(本地用户,本地分数)。

我是否需要为这种事情创build我自己的“节点”,或者最好使用具有透明背景的SKView上方的UITableView?

我使用的方法是:

  1. 在场景的didMoveToView:方法中,设置一个UIScrollView实例。 设置你需要的所有属性,并确保也设置它的委托,设置隐藏=是,并将其panGestureREcognizer添加到视图手势识别器集合。

  2. 在willMoveFromView中:将其撕下并清理干净。

  3. 在scrollview委托中,实现scrollViewDidScroll :. 在这里,您可以使用滚动视图的contentOffset点来调整节点的位置。

我已经实现了一个不可用的节点,我将其用作需要滚动的事物的根节点。 它所做的只是实现一个contentOffset属性 – 你可以在这里看到它: CATOffsetNode Gist 。

所以在scrollViewDidScroll中:我需要做的是:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { // I don't need to flip scrollView.contentOffset.Y because my scrollview // Y coordinate is flipped. See below. self->_gameListNode.contentOffset = scrollView.contentOffset; } 

然后我添加所需的所有项目作为_gameListNode儿童滚动。

其结果是一个可滚动的游戏列表,它提供了本地滚动视图体验,包括弹性和滑动加速等。

下面是一个可以检查的示例实现: GitHub上的ScrollKit 。

编辑:关于scrollview contentOffset的说明Y方向

UIView和SpriteKit Y坐标的方向相反(UIView的原点是左上angular,Y是向下的),我更喜欢一个坐标系。 所以我做了一个自定义的scrollview类,在初始化器中翻转Y方向。 例如:

 -(id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { CGAffineTransform verticalFlip = CGAffineTransformMakeScale(1,-1); self.transform = verticalFlip; } return self; } 

这是没有必要的(你甚至不需要子类UIScrollView来实现这一点),但没有这个,你将不得不手动翻转contentOffset.Y在scrollview委托。

游戏中心提供排行榜。 也许你可以使用这些? 游戏中心编程指南