目标- C: [UIScreen mainScreen].bounds.size.width实际给出initWithSi



我正在编写一个GUI,具有主菜单,第二个屏幕和主菜单的后退按钮。在初始主菜单中,我使用以下代码行:

midScreenX = [UIScreen mainScreen].bounds.size.width/2;
midScreenY = [UIScreen mainScreen].bounds.size.height/2;
    WarScene *battle = [[WarScene alloc] initWithSize: CGSizeMake(midScreenX*2, midScreenY*2)];
    SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
    SKView * skView = (SKView *)self.view;
    UIView *viewToRemove = [self.view viewWithTag:101];
    [viewToRemove removeFromSuperview];
    [skView presentScene:battle transition:reveal];

这工作…我认为。我打开一个新的场景,我的第二个场景是正确的大小,至少填满了屏幕。场景中有一个节点对屏幕来说太大了,我正在努力改变它,但我不认为这会影响UIScreen的边界。

当我使用以下代码返回主菜单时,问题出现了:

midScreenX = [UIScreen mainScreen].bounds.size.width/2;
midScreenY = [UIScreen mainScreen].bounds.size.height/2;
GameScene *map = [[GameScene alloc] initWithSize: CGSizeMake(midScreenX*2 ,midScreenY*2)];
SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
SKView * skView = (SKView *)self.view;
UIView *viewToRemove = [self.view viewWithTag:3];
[viewToRemove removeFromSuperview];
[skView presentScene:map transition:reveal];

据我所知,传递的值应该与最初发送给[uisscreen mainScreen].bounds的值完全相同。大小,但是初始化的场景太大了。

是否有什么我可以做,这可能会影响[uisscreen mainScreen].bounds.size?还是我误解了init和。bounds的作用?

就我自己已经做过的尝试和解决这个问题而言,我已经看了场景通常如何初始化的例子。我经常看到值被用来代替。bounds,例如:

initWithSize: CGSizeMake(1024,768) 

然而,这是否意味着在不同的设备上,场景将无法正确/完整地显示?

如果你使用的是iOS 6或iOS 7both [uisscreen mainScreen].bounds.size。[UIScreen mainScreen].bounds.size。所有方向的高度都是一样的。但在ios8中,横向模式下给出一个值纵向模式下给出另一个值

NSLog(@"width %f",[[UIScreen mainScreen] bounds].size.width);  //portrait ios7 or 6 = 320  , landscape ios7 or 6 = 320
NSLog(@"height %f",[[UIScreen mainScreen] bounds].size.height); //portrait ios7 or 6 = 568 ,  landscape ios7 or 6 = 568
NSLog(@"width %f",[[UIScreen mainScreen] bounds].size.width);  //portrait ios8 = 320  , landscape ios8 = 568
NSLog(@"height %f",[[UIScreen mainScreen] bounds].size.height); //portrait ios8 = 568 ,  landscape ios8 = 320

我们可以检查这样的条件,

CGFloat midScreenX,midScreenY;
if (UIDeviceOrientationIsLandscape((UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation]))
{
    //landscape mode
    midScreenX = ([[UIScreen mainScreen]bounds].size.width>[[UIScreen mainScreen]bounds].size.height?[[UIScreen mainScreen]bounds].size.width:[[UIScreen mainScreen]bounds].size.height)/2;
    midScreenY = ([[UIScreen mainScreen]bounds].size.width<[[UIScreen mainScreen]bounds].size.height?[[UIScreen mainScreen]bounds].size.width:[[UIScreen mainScreen]bounds].size.height)/2;
}
else
{
    //portrait mode
    midScreenX = [[UIScreen mainScreen]bounds].size.width/2;
    midScreenY = [[UIScreen mainScreen]bounds].size.height/2;
}
我希望你的warScene和gameScene是SKScene的子类。方法initWithSize返回,一个新初始化的场景对象。参数"size"是场景的大小,以点为单位。

更多信息请参考https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKScene_Ref/index.html#//apple_ref/occ/instm/SKScene/initWithSize:

相关内容

最新更新