【发布时间】:2014-03-09 06:21:00
【问题描述】:
我需要一种显示排行榜的方法 - 最佳用户分数(本地用户、本地分数)。
我是否需要为这种事情创建我的“自己的”节点,或者更好地使用具有透明背景的 SKView 之上的 UITableView?
【问题讨论】:
标签: ios objective-c ipad uitableview sprite-kit
我需要一种显示排行榜的方法 - 最佳用户分数(本地用户、本地分数)。
我是否需要为这种事情创建我的“自己的”节点,或者更好地使用具有透明背景的 SKView 之上的 UITableView?
【问题讨论】:
标签: ios objective-c ipad uitableview sprite-kit
我使用的一种方法是:
在场景的 didMoveToView: 方法中,设置一个 UIScrollView 实例。设置您需要的所有属性,并确保还设置其委托,设置 hidden=YES 并将其 panGestureREcognizer 添加到视图手势识别器集合中。
在 willMoveFromView 中:将其拆下并清理干净。
在 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。
【讨论】:
游戏中心提供排行榜。也许你可以使用那些? Game Center Programming Guide
【讨论】: