美文网首页iOSUI工具
IOS SceneDelegate的使用

IOS SceneDelegate的使用

作者: 浅_若清风 | 来源:发表于2021-07-17 22:05 被阅读0次

    SceneDelegate是Xcode11新增的类。在ios13及以后版本中负责AppDelegate的某些功能,例如UI生命周期就由SceneDelegate负责,AppDelegate只负责处理 App 生命周期。如果我们还是按Xcode11以前的逻辑方式在AppDelegate.m 的didFinishLaunchingWithOptions编辑代码,运行程序会发现无论怎么操作都是不显示状态。
    1.打开SceneDelegate.h文件,声明UIWindow;

    @interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
    @property (strong, nonatomic) UIWindow * window;
    @end
    

    2.在SceneDelegate.m文件的willConnectToSession方法里设置rootViewController。

    - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
     {
        if (scene) {
            UIWindowScene *winScene = (UIWindowScene *)scene;
            self.window = [[UIWindow alloc] initWithWindowScene:winScene];
            self.window.backgroundColor = UIColor.redColor;
            self.window.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
            self.window.rootViewController = [ViewController new];
            [self.window makeKeyAndVisible];
        }
    }
    

    3.代理
    (1)SceneDelegate.m里的代理(SceneDelegate的生命周期)

    //加载场景时调用
    - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
    {
    }
    
    //当场景被系统释放时调用,比如中断连接等(在此释放场景的所有资源)
    - (void)sceneDidDisconnect:(UIScene *)scene 
    {
    }
    
    //当场景从后台进入前台时调用,即已经从后台进入前台(使用此方法重新启动场景不活动时暂停(或尚未启动)的任何任务)
    - (void)sceneDidBecomeActive:(UIScene *)scene 
    {
    }
    
    //当场景即将从前台进入后台时调用
    - (void)sceneWillResignActive:(UIScene *)scene 
    {
    }
    
    //当场景从背景过渡到前景时调用,即将从后台进入前台时(使用此方法撤销进入后台时所做的更改)
    - (void)sceneWillEnterForeground:(UIScene *)scene 
    {
    }
    
    //当场景从前景过渡到背景时调用,即已经从前台进入后台(使用该方法保存数据,释放共享资源,存储足够的场景特定状态信息,将场景恢复到当前状态)
    - (void)sceneDidEnterBackground:(UIScene *)scene 
    {
    }
    

    (2)AppDelegate.m里的代理(UISceneSession 的生命周期)

    //在创建新场景会话时调用(使用此方法选择一个配置来创建新场景)
    - (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options 
    {
    }
    
    //关闭场景时调用(使用此方法释放特定于丢弃场景的任何资源)
    - (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions 
    {
    }
    

    对于很多开发者来说,也许一时半会会不适应这种操作方式,我们也可以通过删除SceneDelegate的方法,恢复Xcode11之前的开发操作方式,具体可以参考文章IOS删除SceneDelegate

    相关文章

      网友评论

        本文标题:IOS SceneDelegate的使用

        本文链接:https://www.haomeiwen.com/subject/lbsbpltx.html