Ios 使用UIKit';s带SpriteKit的UIScrollView
我在这里读到两个关于这个的问题,都有相同的答案。建议的解决方案是创建UIScrollView对象,然后将其添加到目标场景的didMoveToView:中SKScene的父视图中,并在willMoveFromView:中将其删除 这就是我实现的目标场景代码:Ios 使用UIKit';s带SpriteKit的UIScrollView,ios,objective-c,uiscrollview,sprite-kit,Ios,Objective C,Uiscrollview,Sprite Kit,我在这里读到两个关于这个的问题,都有相同的答案。建议的解决方案是创建UIScrollView对象,然后将其添加到目标场景的didMoveToView:中SKScene的父视图中,并在willMoveFromView:中将其删除 这就是我实现的目标场景代码: @interface MQSSMakerScene () @property BOOL contentCreated; @property MQSSMakerWorkspaceLayer *workspaceLayer; @property
@interface MQSSMakerScene ()
@property BOOL contentCreated;
@property MQSSMakerWorkspaceLayer *workspaceLayer;
@property MQSSMakerDockLayer *dockLayer;
@property UIScrollView *scrollView;
@end
@implementation MQSSMakerScene
- (id)initWithSize:(CGSize)size
{
if (self = [super initWithSize:size]) {
CGSize layerSize = CGSizeMake(944, 140);
CGPoint layerPosition = CGPointMake(40, 768-(140+30));
CGRect viewFrame = CGRectMake(layerPosition.x, layerPosition.y, layerSize.width, layerSize.height);
_scrollView = [[UIScrollView alloc] initWithFrame:viewFrame];
_scrollView.contentSize = CGSizeMake(2000, 120);
_scrollView.scrollEnabled = YES;
_scrollView.showsHorizontalScrollIndicator = YES;
_scrollView.backgroundColor = [UIColor brownColor];
}
return self;
}
- (void)didMoveToView:(SKView *)view
{
[super didMoveToView:view];
if(!self.contentCreated) {
[self createSceneContents];
self.contentCreated = YES;
}
[self.view addSubview:_scrollView]; // --> WHERE IT'S BEING ADDED
}
- (void)willMoveFromView:(SKView *)view
{
[super willMoveFromView:view];
[_scrollView removeFromSuperview]; // --> WHERE IT'S BEING REMOVED
}
- (void)createSceneContents
{
self.backgroundColor = [UIColor colorWithHue:.237 saturation:.56 brightness:.46 alpha:1];
self.scaleMode = SKSceneScaleModeAspectFill;
[self addChild:[self newMakerLayout]];
}
- (SKNode *)newMakerLayout
{
SKNode *mainLayout = [[SKNode alloc] init];
self.workspaceLayer = [[MQSSMakerWorkspaceLayer alloc] init];
self.dockLayer = [[MQSSMakerDockLayer alloc] init];
[mainLayout addChild:self.workspaceLayer];
[mainLayout addChild:self.dockLayer];
MQSSStoryObject *ob1 = [[MQSSStoryObject alloc] initWithImageNamed:@"maker-1.png"];
[self.workspaceLayer addChild:ob1];
return mainLayout;
}
@end
请注意,单击按钮时,用户应从主场景转到此场景。现在的问题是,一旦我添加了行:
[self.view addSubview:_scrollView];
要将UIScrollView对象添加到此场景,应用程序将不再转到此场景,而是将UIScrollView添加到我要从中转换的主场景。在过渡到另一个场景时,它也不会将其删除。一旦我注释掉这一行,一切都会像预期的那样工作,显然没有呈现UIScrollView
我被卡住了。非常感谢您的任何帮助或建议。谢谢 我终于明白了我的问题所在。我使用viewController的-(void)willLayoutSubviews方法来确保有正确的边界,但是我忘记了查看是否已经显示了我的场景。这导致每次在旧场景的上方布置视图时,都会出现一个新的Welcome场景
-(void)willLayoutSubviews
{
if(!self.didPresentScene)
{
// Present scene here
....
self.didPresentScene = YES;
}
}
这正是我所面临的问题,只有在UITextView中。这真是令人发狂。。。似乎也无法让我的google foo帮助我。你找到解决办法了吗?你真是个英雄!一个月了,我还没弄明白,现在就行了!谢谢,非常欢迎!我很高兴帮助了别人:)编码快乐!