zoukankan      html  css  js  c++  java
  • quick cocos2dx2.2.6 lua 屏幕旋转横竖屏转换详解 屏幕方向自由切换

    这里指的是程序中代码控制横竖屏转换

    1. 先调用ios/android的api使屏幕旋转

    IOS

    在ios平台,cocos2dx的视图其实都是显示在一个UIViewController的。所以我们需要旋转UIViewController的方向。

    在ios8以前只需调用以下代码:

        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
        [UIViewController attemptRotationToDeviceOrientation];    
    
        s_self->viewController.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        float width =s_self->viewController.view.bounds.size.width;
        float height =s_self->viewController.view.bounds.size.height;
        s_self->viewController.view.bounds = CGRectMake(0, 0, height, width);

    但是在ios8以后这样做就不行了。苹果不推荐手动修改UIViewController的方向。

    苹果推荐的是重力使得屏幕自动旋转然后修改UI布局;或者是在切换UIViewController,新UIViewController有新的方向。

    ios8做法:新建一个RootViewController2,代码跟RootViewController一样,只修改设置方向的相关代码。

    在AppController里引入并初始化RootViewController2

    AppController.h:

    ...
    @public
    RootViewController *viewController; @public RootViewController2 *viewController2;
    ....

    AppController.mm:

    static AppController *s_self;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        s_self = self;
        ....// Use RootViewController manage EAGLView
        viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
        viewController.wantsFullScreenLayout = YES;
        viewController.view = __glView;
        
        viewController2 = [[RootViewController2 alloc] initWithNibName:nil bundle:nil];
        viewController2.wantsFullScreenLayout = YES;
        
        ....
    }

    切换RootViewController

    +(void)changeRootViewController{
    EAGLView *__glView = (EAGLView *)s_self->viewController.view; s_self->viewController.view = nil; s_self->viewController2.view = __glView; if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0) { [s_self->window addSubview:s_self->viewController2.view]; } [s_self->window setRootViewController:s_self->viewController2];

          [__glView setOriginalRect:__glView.frame];

    
        
        CCLOG("____________________________");
        CCLOG("glView  retainCount %lu",(unsigned long)[__glView retainCount]);
        CCLOG("viewController retainCount %lu",(unsigned long)[s_self->viewController retainCount]);
        CCLOG("viewController2 retainCount %lu",(unsigned long)[s_self->viewController2 retainCount]);
    }

    RootViewController.mm控制方向代码:

    - (NSUInteger) supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;    //横

         //UIInterfaceOrientationMaskLandscape  竖

    }

    Android

    AndroidManifest.xml

    ..
    <activity android:name=".XXX"
                android:label="@string/app_name"
                android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                android:screenOrientation="portrait"
                android:configChanges="orientation">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    ..

    xxx.java 旋转屏幕

    public static void changeOrientationToLandscape(){
            _this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    public static void changeOrientationToPortrait(){
            _this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);        
    }

     2. 修改DesignResolutionSize和FrameSize

      
      -- 调用oc java代码修改方向
      if
    device.platform == "ios" then luaoc.callStaticMethod("AppController", "changeToRootViewController") elseif device.platform == "android" then luaj.callStaticMethod("com/iwo/doudizhu/Doudizhu", "changeOrientationToPortrait") end -- 修改FrameSize width height互换 local frameSize = CCEGLView:sharedOpenGLView():getFrameSize() CCEGLView:sharedOpenGLView():setFrameSize(frameSize.height,frameSize.width) -- 修改DesignResolutionSize 修改lua display相关值 主要是width height互换 glview:setDesignResolutionSize(....)
      display...
  • 相关阅读:
    忘记 mysql 数据库连接密码(解决方案)
    CVE-2020-14882&CVE-2020-14883 Weblogic未授权远程命令执行漏洞
    社会工程学之信息收集之信息收集
    8种src常用越权测试小技巧
    《数据中台-让数据用起来》思维导图(更新中)
    idea使用zsh代替系统的terminal
    mac安装oh my zsh
    mac安装homebrew
    navicat破解(亲测可用)
    docker搭建typecho博客系统,并启用https
  • 原文地址:https://www.cnblogs.com/junzitandandan/p/4317563.html
Copyright © 2011-2022 走看看