zoukankan      html  css  js  c++  java
  • ios、andriod、cocos2d 视图层次理解

    IOS:
    首先,不管是应用还是游戏都会有一个UIApplication实例 在整个应用程序代码中,只要有出现UIWindow的初始化代码([[UIWindow alloc] initWithFrame:CGRectMake(20, 20, 320, 480)];),任何地方,不仅仅指在AppDelegate.m文件中创建的, 则[UIApplication sharedApplication].windows的数组(默认该数组是空的)中就会多出这么个window对象(只要该window对象没有释放),数组中每个window的显示顺序是按照代码的执行的先后顺序来存放的,即越后面创建的window会覆盖前面的window对象(只有在window对象设置了makeKeyAndVisible,表示使该window显示出来),但不一定,你还可以通过指定window的windowLevel属性(默认0.0)来调整显示的层级,

        一般情况下,ios的应用不建议在应用中创建多个窗口,所以一般我们看到的就只有在AppDelegate.m文件的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中有个创建window的代码

      然后接下来就在这个创建的window上面添加viewController的view,有两种方式self.window.rootViewController = viewController   和 [self.window addSubView:viewController.view]

    再在UIWindow之前的就是UIApplication的范畴了  层级更高了 暂不研究,待续。。。。。。

    IOS生命周期论:
        viewcontroller的创建可通过加载xib文件(方法initWithNibName)和代码方式创建(init loadView),其中init最初始的构建,loadView创建viewController中的视图对象,而不是视图view中的其他界面元素(这些应放在viewDidLoad中),定制VC时,如果覆盖loadView方法,不需要调用[super loadView]方法,
         然后再是viewWillAppear、viewDidAppear。dealloc等等
    andriod生命周期:
        andriod的所有应用从始至终都只有一个Activity展现在当前屏幕窗口上,但它不是所谓的window对象,类似于viewController的功能,视图控制器,在Activity中也能添加各种view界面元素,生命周期如下:
        Activity生命周期记忆
        不难看出,其实这些方法都是两两对应的,onCreate创建与onDestroy销毁;onStart可见与onStop不可见;onResume可编 辑(即焦点)与onPause;这6个方法是相对应的,那么就只剩下一个onRestart方法了,这个方法在什么时候调用呢?答案就是:在 Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用 onCreate)方法;如果被onDestroy了,则是调用onCreate方法。
       其中,应用程序启动的时候依次调用 onCreate()->onStart()->onResume三个方法
       点击手机Back键,调用 onPause()->onStop()->onDestory()三个方法,应用程序完全退出并销毁内存
       点击Home键,调用 onPause()->onStop()这两个方法,这时候应用程序并没有销毁
       ,当再次进入应用程序时,调用 onRestart()->onStart()->onResume()三个方法
     另外当Activity处于pase stop状态时,虽然此时仍存在于内存,但很有可能系统在内存不足时回收这些activity的内存。

    游戏的视图理解(cocos2d)
        在IOS里,cocos2d编写了一个Object对象的子View,EAGView对象,所有游戏的界面呈现都扶着其上,然后再将这个EAGView对象viewController.view = __glView;  [window addSubview: viewController.view];([window setRootViewController:viewController];)
        andriod里貌似没有看到类似的代码,估计在编译cocos的阶段就写编到了libgame.a库里吧
        整个cocos2d就是一坨C++库,整个游戏定义了一个CCApplication对象,然后整个游戏的界面切换靠单例CCDirector(导演)来管理(replaceScene、pushScene等),而场景(Scene就相当于是一个容器,类似UIViewController、Activity一样),界面的具体显示则需在此场景里添加许多的层(Layer),然后在层上添加label button、sprite(精灵)这些
  • 相关阅读:
    案例的法律分析
    被投资人“送”入看守所 z
    easyUI样式之easyui-switchbutton
    阿里大于发送短信(java)
    java Random.nextInt()方法
    DateFormatUtil格式化时间
    MessageFormat.format 字符串的模板替换
    JsonArray对象
    jsonObject关于xml,json,bean之间的转换关系
    Java 使用IE浏览器下载文件,文件名乱码问题
  • 原文地址:https://www.cnblogs.com/cnsec/p/11515854.html
Copyright © 2011-2022 走看看