zoukankan      html  css  js  c++  java
  • 2021_基础

    1、SeneDelegate

    iOS13之前,Appdelegate的职责全权处理App生命周期和UI生命周期;

    iOS13之后,Appdelegate的职责是:

    1、 处理 App 生命周期

    2、新的 Scene Session 生命周期

    那UI的生命周期呢?交给新增的Scene Delegate处理

    关键一步:

        self.window= [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];

    另外

    - (void)makeKeyAndVisible; 

    让当前UIWindow变成keyWindow,并显示出来

     

    2、生命周期

    iOS App的生命周期

    iOS应用程序的生命周期

    3、layoutSubviews方便数据计算,drawRect方便视图重绘

    layoutSubviews与drawRect

    setNeedsLayout在receiver标上一个需要被重新布局的标记

    setNeedsDisplay在receiver标上一个需要被重新绘图的标记

     

    layoutSubviews在以下情况下会被调用:

    1、init初始化不会触发layoutSubviews。
    2、addSubview会触发layoutSubviews。
    3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
    4、滚动一个UIScrollView会触发layoutSubviews。
    5、旋转Screen会触发父UIView上的layoutSubviews事件。
    6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。 
    7、直接调用setLayoutSubviews。

    drawRect在以下情况下会被调用:

    1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。drawRect 掉用是在Controller->loadView,?Controller->viewDidLoad?两方法之后掉用的.所以不用担心在 控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些View?draw的时候需要用到某些变量 值).
    2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
    3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
    4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0。
    以上1,2推荐;而3,4不提倡 

     

  • 相关阅读:
    windows下配置docker
    libxml2 安装及使用
    lua 5.3 英文手册 自己收集整理版
    Unity3D RPC调用顺序问题
    对于问题的一个思考
    第十三章博客
    第十一章
    第十章博客
    第九章笔记
    S1304数据库前三章测试错题
  • 原文地址:https://www.cnblogs.com/liyonghua/p/14641707.html
Copyright © 2011-2022 走看看