cocos2dx游戏之适配iPhoneX屏幕

       最近项目中有关于做iPhoneX屏幕适配问题,关键是这个项目已经做的差不多了,唯独iPhoneX屏幕没有适配,然后这个适配任务就落到我身上了,好了,话不多说,开始记录。。。

       开始搞时在网上也查看了很多资料,但是由于第一次做iPhoneX的适配,很多东西也是先学。

        首先第一步很重要找对你项目的启动图,也就是ios初次进入的屏幕加载图,一定要设置到 iPhoneX  Landscape iOS 11+ 的上面。

cocos2dx游戏之适配iPhoneX屏幕_第1张图片

这个就是将启动图设置成功了,下面进入测试,看是否能全屏加载。其实 ios 他们用这个启动图进行自动适配。

下面就是进行ios安全区域的问题了,否则的话,你在四周最靠边的地方按钮或者其他操作会受到影响,开始进行代码

1.修改ViewController.mm 增加ios11的新回调方法(ViewController.mm这个文件需要去找到自己项目下对应的文件 

- (void)viewSafeAreaInsetsDidChange {
    
    [super viewSafeAreaInsetsDidChange];
    NSLog(@"viewSafeAreaInsetsDidChange %@",NSStringFromUIEdgeInsets(self.view.safeAreaInsets));
    [self updateOrientation];
}

bool changeViewFrame = false;
- (void)updateOrientation {
    if (@available(iOS 11.0, *)) {
		 CGRect rect = [[UIScreenmainScreen]bounds];

        CGSize size = rect.size;

        CGFloat width = size.width;

        CGFloat height = size.height;

        CGFloat scale_screen = [UIScreenmainScreen].scale;

        //通过分辨率判断是否是iPhoneX手机

        if (width*scale_screen ==2436and height*scale_screen ==1125)

        {
			if (self.view and !changeViewFrame)
			{
				CGRect s = CGRectMake(self.view.safeAreaInsets.left,0,self.view.frame.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right,
				self.view.frame.size.height - self.view.safeAreaInsets.bottom);
				//x,y,width,height
				self.view.frame = s;
				// 只需要记录一次,因为每次change view frame 都会改变一次这个
				changeViewFrame = true;
			}
		}
    } else {
        
    }   
}


2.修改Controller.mm 增加全屏背景默认纯色背景Controller.mm这个文件需要去找到自己项目下对应的文件 

在 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这个方法下增加一个更改颜色或者图片,下边是用的颜色,,

if (@available(iOS 11.0, *))
    {
		 CGRect rect = [[UIScreenmainScreen]bounds];

        CGSize size = rect.size;

        CGFloat width = size.width;

        CGFloat height = size.height;

        CGFloat scale_screen = [UIScreenmainScreen].scale;

        //通过分辨率判断是否是iPhoneX手机

        if (width*scale_screen ==2436and height*scale_screen ==1125)

        {
			CGRect s = CGRectMake(0,0,_viewController.view.frame.size.width + _viewController.view.safeAreaInsets.left + _viewController.view.safeAreaInsets.right,_viewController.view.frame.size.height + _viewController.view.safeAreaInsets.bottom);
			UIView *Ucolor = [[UIView alloc]initWithFrame:s];
			Ucolor.backgroundColor = [UIColor darkGrayColor]; // 设置全局默认背景色 darkGrayColor whiteColor
			[window addSubview:Ucolor];
			[window sendSubviewToBack:Ucolor];
		}
    }

,在这里给小伙伴们分享一个设置rgb颜色的方法:

[UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]


图片是在 iPhoneX的判断里加,替换掉颜色即可:

UIImageView* imageViewL = [[UIImageViewalloc]initWithFrame:viewLeft.bounds];

            imageViewL.image = [UIImageimageNamed:@"bg_back.png"];

            [viewLeft addSubview:imageViewL];

            [window addSubview:viewLeft];

            [window sendSubviewToBack:viewLeft];

            

            UIView *viewRight = [[UIViewalloc]initWithFrame:CGRectMake(_viewController.view.frame.size.width + 31,0,31,_viewController.view.frame.size.height)];

            UIImageView* imageView = [[UIImageViewalloc]initWithFrame:viewRight.bounds];

            imageView.image = [UIImageimageNamed:@"bg_back.png"];

            [viewRight addSubview:imageView];

            [window addSubview:viewRight];

            [window sendSubviewToBack:viewRight];

到这里,也就差不多了,但是呢,有强迫症的小伙伴们,想要把iPhoneX下的横条隐藏掉,点击后出现,下面就是它的方法:

这个方法是在ViewController.mm这个文件中,

- (BOOL)prefersHomeIndicatorAutoHidden{  
    
    return YES;  
  
}  
到此,小伙伴们,大佬我就要告辞了,该下班了。希望大神可以分享一下其他适配方法!!!




你可能感兴趣的:(COCOS2DX)