gpt4 book ai didi

ios - 目标 - C,[UIScreen mainScreen].bounds.size.width 实际给出什么以及 initWithSize : actually require? 是什么

转载 作者:行者123 更新时间:2023-11-29 12:15:34 24 4
gpt4 key购买 nike

我正在编写一个 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];

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

有什么我可以做的可能会影响 [UIScreen mainScreen].bounds.size 的事情吗?还是我误解了 init 和 .bounds 的实际作用?

就我自己尝试解决此问题所做的工作而言,我查看了场景通常如何初始化的示例。我看到经常使用值代替 .bounds 例如:

initWithSize: CGSizeMake(1024,768) 

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

最佳答案

如果您使用的是 iOS 6 或 iOS 7,[UIScreen mainScreen].bounds.size.width 和 [UIScreen mainScreen].bounds.size.height 在所有方向上都是相同的..但在 iOS 8 中,它在横向模式下给出一个值,在纵向模式下给出另一个值

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 :

关于ios - 目标 - C,[UIScreen mainScreen].bounds.size.width 实际给出什么以及 initWithSize : actually require? 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32113335/

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