【问题标题】:What is the right way to create scrollable table in SKSpriteKit?在 SpriteKit 中创建可滚动表的正确方法是什么?
【发布时间】:2014-03-09 06:21:00
【问题描述】:

我需要一种显示排行榜的方法 - 最佳用户分数(本地用户、本地分数)。

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

【问题讨论】:

    标签: ios objective-c ipad uitableview sprite-kit


    【解决方案1】:

    我使用的一种方法是:

    1. 在场景的 didMoveToView: 方法中,设置一个 UIScrollView 实例。设置您需要的所有属性,并确保还设置其委托,设置 hidden=YES 并将其 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 的子项。

    结果是一个可滚动的游戏列表,提供原生滚动视图体验,包括弹跳和滑动加速等。

    您可以查看以下示例实现:ScrollKit on GitHub

    编辑:关于scrollview contentOffset Y 方向的注释

    UIView 和 SpriteKit 的 Y 坐标方向相反(UIView 的原点在左上角,Y 向下增加),我更喜欢坚持一个坐标系。所以我制作了一个自定义滚动视图类,它在初始化程序中翻转 Y 方向。例如:

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

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

    【讨论】:

    • 有趣,谢谢。但是你为什么使用 UIScrollView 而不是 UITableView 呢?让我们假设您不需要水平滚动。嗯...只是认为使用 UISrcollView 可以为 SpriteKit 中的滚动带来更多功能。
    • UIScrollView 适合我的需要,所以我什至没有考虑使用其他任何东西。我也使用水平滚动,但我使用嵌套滚动视图。我用关于 UIView Y 坐标的评论更新了我的答案,顺便说一句。我一开始忘了提。
    • 还有最后一个问题:为什么要在didMoveToView:中配置UIScrollView?为什么不在 init 方法或其他地方?只是好奇。
    • 场景在添加到视图之前被初始化,所以当 initWithSize: 被调用时,scene.view 将为 nil。 didMoveToView: 是最早保证场景引用其视图的地方。
    • 那么,在呈现场景之前配置场景的正确方法是什么? (stackoverflow.com/questions/22284211/…)
    【解决方案2】:

    游戏中心提供排行榜。也许你可以使用那些? Game Center Programming Guide

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多