Ios SpriteKit和可滚动列表
我一直在试图找到一种“简单”的方法,为我的SpriteKit游戏提供一个可滚动的垂直列表 我将使用它来实现我游戏中的商店/升级部分,因此我希望用户能够向下滚动列表以查看可能的不同升级 我看过不少关于将UIScrollView集成到SpriteKit中的帖子,但大多数帖子似乎都会滚动整个屏幕 到目前为止,我得到的是:Ios SpriteKit和可滚动列表,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我一直在试图找到一种“简单”的方法,为我的SpriteKit游戏提供一个可滚动的垂直列表 我将使用它来实现我游戏中的商店/升级部分,因此我希望用户能够向下滚动列表以查看可能的不同升级 我看过不少关于将UIScrollView集成到SpriteKit中的帖子,但大多数帖子似乎都会滚动整个屏幕 到目前为止,我得到的是: -(void) createSceneContents { [super createSceneContents]; _scrollView = [[UISc
-(void) createSceneContents
{
[super createSceneContents];
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10,100, 250, 200)];
_scrollView.contentSize = CGSizeMake(2000, 120);
_scrollView.scrollEnabled = YES;
_scrollView.showsHorizontalScrollIndicator = YES;
_scrollView.backgroundColor = [UIColor brownColor];
[self.view addSubview:_scrollView];
//Test sprites for scrolling and zooming
SKSpriteNode *greenTestSprite = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor]
size:CGSizeMake(25, 25)];
[greenTestSprite setName:@"greenTestSprite"];
greenTestSprite.position = CGPointMake(25, 125);
[self addChild:greenTestSprite];
//[self addChild: [self newMenuNode]];
}
我在想,对我来说,能够将绿色测试精灵添加到UIScrollView中最简单的方法是什么。我无法像其他人那样理解我的想法,因为他们似乎将UIScrollView的滚动与SKView连接起来,使屏幕看起来像是在滚动
我相信有一个更简单的方法可以做到这一点,但我已经寻找了一段时间了
任何帮助都将不胜感激
感谢提前分配。您可以在
SpriteKit
应用程序中使用UIKit
如果你使用UIScrollView
你将不得不在重复使用单元格、布局、用户交互等方面弄脏你的手。如果你只是使用(并定制)一个UITableView,你实际上可以让一个单元格看起来很好(而一个单元格是一个UIView
,因此你可以在其中删除一堆子视图)
您的层次结构将是:
场景:
TableView如果可能的话,我会避免使用UIKit
组件。当您的UIView
是UIKit
组件的父级时,很难与SKView
中的SpriteKit
组件进行交互。创建SKNode
子类并创建一个“ScrollingNode”非常容易,它使用SKView
上的手势识别器进行滚动。下面是一个例子:
另一个很好的教程是。转到手势识别器末尾的部分。我已经给出了另一个答案,但如果您确实希望在滚动视图中使用[\u scrollview addChild:greenTestSprite],则应该使用它。您当前正在将其添加到主视图中。谢谢,我想我可以做一些事情来允许选中精灵。@davbryn顺便说一句,这不起作用:-(嘿,谢谢allot看这个。这看起来正是我需要的。我设法使用了UIScrollView,但它有问题,结果只是放弃了整个想法,并用按钮来滚动。今晚我会试试这个!嗨,Jen,你知道有什么办法不让你的滚动节点滚动到全屏。我只需要滚动一下就可以了我将在屏幕的一小部分内。我一直在四处闲逛,无法找到它。提前感谢!嗨,Dave3of5,我已经更新了我的代码库,希望你会发现一些有用的东西。基本上我做了两件事:(1)使用SKCropNode屏蔽不应该显示的滚动内容,以及(2)为滚动节点实现委托方法手势识别器:shouldReceiveTouch
,以忽略滚动节点父节点之外的任何触摸。请查看我发布的代码上的JADPartScrollingScene
。理想情况下,您可能希望创建一个名为SKScrollingWindow
的新类将该场景的init中发生的一切封装起来。