SwiftUI Scene 基础使用(教程含代码)

Scene

应用程序用户界面的一部分,其生命周期由系统管理

protocol Scene

使用教程

您可以通过在应用程序主体中组合一个或多个符合Scene协议的实例来创建应用程序。您可以使用SwiftUI提供的原始场景(例如WindowGroup)以及由其他场景组成的自定义场景。要创建自定义场景,请声明一个符合Scene协议的类型。实现所需的主体计算属性并为您的自定义场景提供内容:

struct MyScene: Scene {
    var body: some Scene {
        WindowGroup {
            MyRootView()
        }
    }
}

场景充当要显示给用户的视图层次结构的容器。系统会根据平台的状态并取决于应用程序的当前状态,决定何时以及如何在用户界面中呈现视图层次结构。例如,对于上面显示的窗口组,系统允许用户在macOS和iPadOS等平台上创建或删除包含MyRootView的窗口。在其他平台上,相同的视图层次结构在活动时可能会占用整个显示。

从场景或其视图之一中读取scenePhase环境值,以检查场景是否处于活动状态或处于其他状态。您可以使用Environment属性创建一个包含场景阶段的属性,该场景阶段是ScenePhase枚举中的值之一:

struct MyScene: Scene {
    @Environment(\.scenePhase) private var scenePhase

    // ...
}

Scene协议提供了场景修饰符,定义为具有默认实现的协议方法,可用于配置场景。例如,可以使用onChange(of:perform :)修饰符在值更改时触发操作。当窗口组中的所有场景都移至后台时,以下代码清空缓存:

struct MyScene: Scene {
    @Environment(\.scenePhase) private var scenePhase
    @StateObject private var cache = DataCache()

    var body: some Scene {
        WindowGroup {
            MyRootView()
        }
        .onChange(of: scenePhase) { newScenePhase in
            if newScenePhase == .background {
                cache.empty()
            }
        }
    }
}

推荐

基础文章推荐

经典教程推荐

技术源码推荐

推荐文章

CoreData篇

Combine篇

TextField篇

JSON文件篇


一篇文章系列

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容