Ios SKIPAD场景高度宽度反转

Ios SKIPAD场景高度宽度反转,ios,sprite-kit,Ios,Sprite Kit,我试图在一个只支持横向模式的iPad应用程序中用瓷砖填充我的场景。在场景中,我检测到h&w如下: int h = [UIScreen mainScreen].bounds.size.height; int w = [UIScreen mainScreen].bounds.size.width; 不幸的是,返回的维度与它们需要的正好相反。在视图控制器或视图的内容中讨论这个问题有很多主题,解决方案似乎是在ViewWillIsped中检测屏幕大小,而不是在viewDidLoad中。然而,这似乎不是S

我试图在一个只支持横向模式的iPad应用程序中用瓷砖填充我的场景。在场景中,我检测到h&w如下:

int h = [UIScreen mainScreen].bounds.size.height;
int w = [UIScreen mainScreen].bounds.size.width;
不幸的是,返回的维度与它们需要的正好相反。在视图控制器或视图的内容中讨论这个问题有很多主题,解决方案似乎是在ViewWillIsped中检测屏幕大小,而不是在viewDidLoad中。然而,这似乎不是SKScenes的有效解决方案


有什么建议吗?

尝试,不要使用
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];
    }
}
在布局处理程序中初始化场景没有意义。在布局处理程序中调整场景大小。(这就是它的用途。)

场景应该实现
-(void)didChangeSize:(CGSize)oldSize
,以将所有内容移动到正确的位置


HoRayy,现在你的游戏也处理设备旋转。

+ 1用于测试视图的场景不是NIL——大多数我所看到的解决方案都没有考虑View WayLaySubView可以重复调用的事实(即,当视图大小或可见性改变是指在View Controller中不使用View Dead Load时)。我应该在哪个文件中实现viewWillLayoutSubviews?SKScene、ViewController或其他地方?在ViewController中,您将看到一个方法,该方法包含与上述内容基本相同的内容,但它是ViewDidLoad、remove以及上述所有方法。我尝试了这个方法,它的行为似乎至少有所不同。但当我这样做时:inth=[UIScreen mainScreen].bounds.size.height;int w=[UIScreen mainScreen].bounds.size.width;在场景中,我得到了不正确的尺寸。当一个人在场景中时,如何获得正确的横向模式高度和宽度?使用self.frame,在那里你可以访问你需要的内容,即self.frame.size.heightWish我可以多次投赞成票。尽管viewWillLayoutSubviews技术(见上文和各种书籍)在一定程度上有效,但如果您记录场景的实际宽度和高度,它们不会从初始设置更改。然而,上面提到的是初始化和更改。此外,ViewWillLayoutSubview也被称为设备每次旋转时的视图,这是一种痛苦
@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;
}