gpt4 book ai didi

ios - 将 UIKit 的 UIScrollView 与 SpriteKit 结合使用

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:16 24 4
gpt4 key购买 nike

我在这里阅读了两个关于此的问题,两个问题的答案相同。建议的解决方案是创建 UIScrollView 对象,然后在目标场景的 didMoveToView: 中将其添加到 SKScene 的父 View ,在 willMoveFromView: 中将其移除。

这就是我实现的目标场景代码:

@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 方法来确保我有正确的边界,但我忘记查看我的 SKScene 是否已经呈现。这导致每次将 View 放置在旧 View 之上时都会呈现一个新的 welcomeScene。

-(void)willLayoutSubviews
{
if(!self.didPresentScene)
{
// Present scene here
....
self.didPresentScene = YES;
}
}

关于ios - 将 UIKit 的 UIScrollView 与 SpriteKit 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21126316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com