当前位置:首页 > 科技  > 软件

如何使用 SwiftUI 构建 visionOS 应用

来源: 责编: 时间:2024-05-17 17:49:06 299观看
导读前言Apple Vision Pro 即将推出,现在是看看 SwiftUI API 的完美时机,这使我们能够将我们的应用程序适应 visionOS 提供的沉浸式世界。苹果表示,构建应用程序的最佳方式是使用 Swift 和 SwiftUI。下面,我们将学习如何使用

LDJ28资讯网——每日最新资讯28at.com

前言

Apple Vision Pro 即将推出,现在是看看 SwiftUI API 的完美时机,这使我们能够将我们的应用程序适应 visionOS 提供的沉浸式世界。苹果表示,构建应用程序的最佳方式是使用 Swift 和 SwiftUI。下面,我们将学习如何使用 SwiftUI 构建 visionOS 应用程序。LDJ28资讯网——每日最新资讯28at.com

Windows

我喜欢 SwiftUI 的一点是它如何自动适应平台。你无需执行任何操作即可在 visionOS 上运行使用 SwiftUI 编写的应用程序。它可以即插即用。但是,你始终可以通过向前移动并适应平台功能来改进用户体验。LDJ28资讯网——每日最新资讯28at.com

struct ContentView: View {    var body: some View {        NavigationSplitView {            List {            // 列表内容            }            .navigationTitle("Models")            .toolbar {                ToolbarItem(placement: .bottomOrnament) {                    Button("open", systemImage: "doc.badge.plus") {                                            }                }                                ToolbarItem(placement: .bottomOrnament) {                    Button("open", systemImage: "link.badge.plus") {                                            }                }            }        } detail: {            Text("Choose something from the sidebar")        }    }}

在上面的示例中,我们使用了称为 bottomOrnament 的新工具栏放置。visionOS 中的装饰是位于窗口外部的位置,用于呈现与窗口连接的控件。你还可以通过使用新的 ornament 视图修改器手动创建它们。LDJ28资讯网——每日最新资讯28at.com

struct ContentView: View {    var body: some View {        NavigationSplitView {            List {            // 列表内容            }            .navigationTitle("Models")            .ornament(attachmentAnchor: .scene(.leading)) {                // 在此处放置你的视图            }        } detail: {            Text("Choose something from the sidebar")        }    }}

新的 ornament 视图修改器允许我们为其连接的窗口创建一个具有特定锚点的装饰。将你的应用内容适应 visionOS 提供的沉浸式体验的另一种方法是使用 transform3DEffect 和 rotation3DEffect 视图修改器来加入深度效果。如下图:LDJ28资讯网——每日最新资讯28at.com

LDJ28资讯网——每日最新资讯28at.com

Volumes

你的应用程序可以在 visionOS 上的同一场景中并排显示 2D 和 3D 内容。在这种情况下,我们可以使用 RealityKit 框架来呈现 3D 内容。例如,RealityKit 为我们提供了 Model3D SwiftUI 视图,允许我们从 USDZ 或实际文件中显示 3D 模型。LDJ28资讯网——每日最新资讯28at.com

struct ContentView: View {    var body: some View {        NavigationSplitView {            List(Model.all) { model in                NavigationLink {                    Model3D(named: model.name)                } label: {                    Text(verbatim: model.name)                }            }            .navigationTitle("Models")        } detail: {            Model3D(named: "robot")        }    }}

Model3D 视图的工作方式类似于 AsyncImage 视图,并异步加载模型。你还可以使用 Model3D 初始化器的另一种变体,它允许你自定义模型配置并添加占位视图。LDJ28资讯网——每日最新资讯28at.com

struct ContentView: View {    var body: some View {        NavigationSplitView {            List(Model.all) { model in                NavigationLink {                    Model3D(                        url: Bundle.main.url(                            forResource: model.name,                            withExtension: "usdz"                        )!                    ) { resolved in                        resolved                            .resizable()                            .aspectRatio(contentMode: .fit)                    } placeholder: {                        ProgressView()                    }                } label: {                    Text(verbatim: model.name)                }            }            .navigationTitle("Models")        } detail: {            Model3D(named: "robot")        }    }}

在你的应用程序中呈现 3D 内容时,你可以使用 windowStyle 修饰符来启用内容的体积显示。体积样式允许你的内容在第三维中增长,以匹配模型的大小。LDJ28资讯网——每日最新资讯28at.com

对于更复杂的 3D 场景,我们可以使用 RealityView 并填充它以 3D 内容。LDJ28资讯网——每日最新资讯28at.com

struct ContentView: View {    var body: some View {        NavigationSplitView {            List(Model.all) { model in                NavigationLink {                    RealityView { content in                        // load the content and add to the scene                    }                } label: {                    Text(verbatim: model.name)                }            }            .navigationTitle("Models")        } detail: {            Text("Choose something from the sidebar")        }    }}

沉浸式空间

visionOS 的第三个选项是完全沉浸式体验,允许我们通过隐藏周围的所有内容来专注于你的场景。LDJ28资讯网——每日最新资讯28at.com

@mainstruct MyApp: App {    var body: some Scene {        WindowGroup {            ContentView()        }                ImmersiveSpace(id: "solar-system") {            SolarSystemView()        }    }}

正如你在上面的示例中所看到的,我们通过使用 ImmersiveSpace 类型来定义场景。它允许我们通过使用 openImmersiveSpace 环境值来启用它。LDJ28资讯网——每日最新资讯28at.com

struct MyMenuView: View {    @Environment(/.openImmersiveSpace) private var openImmersiveSpace        var body: some View {        Button("Enjoy immersive space") {            Task {                await openImmersiveSpace(id: "solar-system")            }        }    }}

我们还可以使用 dismissImmersiveSpace 环境值来关闭沉浸式空间。请记住,你一次只能显示一个沉浸式空间。LDJ28资讯网——每日最新资讯28at.com

struct SolarSystemView: View {    @Environment(/.dismissImmersiveSpace) private var dismiss        var body: some View {        // Immersive experience                Button("Dismiss") {            Task {                await dismiss()            }        }    }}

结论

在介绍了 SwiftUI 在 visionOS 上的应用之后,我们了解到 SwiftUI 可以帮助我们轻松构建适应 visionOS 的应用程序。不仅如此,SwiftUI 还提供了许多方便的工具和修饰符,例如 windowStyle 修饰符,可用于在应用程序中呈现 3D 内容,并使内容根据模型的大小自动适应。通过引入沉浸式空间,我们可以将用户带入全新的体验,让他们沉浸在应用程序的世界中。总的来说,SwiftUI 为构建 visionOS 应用程序提供了强大而灵活的工具,我们可以期待在这个全新的平台上开发出令人惊叹的应用体验。LDJ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-88936-0.html如何使用 SwiftUI 构建 visionOS 应用

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Swift 定制 Core Data 迁移

下一篇: ASP.NET Core Web中使用AutoMapper进行对象映射

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
Top