2014-01-14 40 views
3

我在這裏讀了兩個關於這個問題的問題,兩者都有相同的答案。建議的解決方案是創建UIScrollView對象,然後將其添加到目標場景的didMoveToView中的SKScene的父視圖中,在willMoveFromView:中將其刪除。使用UIKit的UIScrollView和SpriteKit

這是目標場景的代碼,我實現:

@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。

我被卡住了。任何幫助或建議是高度讚賞。謝謝!

+0

這是我正面臨的確切問題,只有使用UITextView。它真的很瘋狂......似乎不能讓我的谷歌foo來幫助我。你找到解決方案嗎? – Canis

回答

2

我終於找出了問題所在。我使用viewController的 - (void)willLayoutSubviews方法來確保我有正確的界限,但我忘記了看我的SKScene是否已經出現。這導致每次將視圖放在舊視圖上時都會呈現一個新的welcomeScene。

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

你真是個英雄!一個月,我沒有弄明白,它現在就行了!謝謝。 – Mamouneyya

+0

非常歡迎您!我很樂意幫助別人:)快樂的編碼! – Canis