2013-10-14 2 views
6

가로 모드 만 지원하는 iPad 앱에서 SKScene에 타일을 채우려고합니다. 현장 내에서 나는 w 같은 시간 &을 감지 :SKScene iPad 너비 반전

int h = [UIScreen mainScreen].bounds.size.height; 
int w = [UIScreen mainScreen].bounds.size.width; 

불행하게도, 다시 전송 치수 그들이 할 필요가 무엇의 반대입니다. 보기 컨트롤러 또는보기의 내용 내에서이 문제를 논의하는 데 많은 주제가 있으며 viewDidLoad가 아닌 viewWillAppear에서 화면 크기를 감지하는 것으로 보인다. 그러나 이것은 SKScenes에 대한 유효한 해결책으로 보이지 않습니다.

제안 사항?

답변

12

시도, viewDidLoad를 사용하여이

- (void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    SKView * skView = (SKView *)self.view; 
    if (!skView.scene) { 
     skView.showsFPS = YES; 
     skView.showsNodeCount = YES; 

     SKScene * scene = [MyScene sceneWithSize:skView.bounds.size]; 
     scene.scaleMode = SKSceneScaleModeAspectFill; 

     // Present the scene. 
     [skView presentScene:scene]; 
    } 
} 
+3

+1 뷰의 장면을 테스트하지 않는 경우 - 대부분의 솔루션은 viewWillLayoutSubviews가 반복적으로 호출 될 수 있다고 생각하지 않습니다. 즉, 뷰 크기 또는 가시성이 변경 될 때 – LearnCocos2D

+0

viewDidLoad를 사용하지 마십시오 viewController에서? 어떤 파일에서 viewWillLayoutSubviews를 구현해야합니까? SKScene, ViewController 또는 다른 곳? – zeeple

+0

ViewController에서 위와 동일한 내용을 포함하고 있지만 ViewDidLoad, 그 것을 제거하고 위의 모든 메서드를 포함하는 메서드를 볼 수 있습니다. – DogCoffee

10

그것은 이해가되지 않는다 사용하지는 레이아웃 처리기에서 장면을 초기화합니다. 크기 조정 레이아웃 처리기의 장면. (즉, 위해 무엇입니다.)

@implementation SGOMyScene 
{ 
    SKScene *scene; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    SKView *skView = (SKView *)self.view; 
    skView.showsFPS = YES; 
    skView.showsNodeCount = YES; 

    scene = [SGOMyScene sceneWithSize:skView.bounds.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 

    [skView presentScene:scene]; 
} 

- (void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    SKView *skView = (SKView *)self.view; 
    scene.size = skView.bounds.size; 
} 

장면은 바로 이곳에 모든 이동 - (void)didChangeSize:(CGSize)oldSize를 구현해야합니다.

만세, 게임이 기기 회전을 처리합니다.

+2

소원이 여러 번 투표 할 수 있습니다. 위와 다양한 책에서 본 viewWillLayoutSubviews 기술은 초기 설정에서 절대로 변경하지 않는 장면의 실제 너비와 높이를 기록하면 어느 정도 작동합니다. 위의 내용은 초기화와 변경을 처리합니다. – TJA

+0

또한 ViewWillLayoutSubviews는 기기가 회전 할 때마다 호출되기 때문에 고통입니다 –