探索精彩的全新 api,为你的 visionos app 打造更出色的窗口、空间容器和沉浸式空间。微调场景在重新启动或固定位置时的行为。通过裁剪边缘和对齐,根据周边环境来调整空间容器。将流媒体格式的沉浸式内容从 mac 传输到 apple vision pro。借助空间容器和沉浸式空间,让基于 uikit 的现有 app 更上一层楼。

视频封面
视频地址

此文章由AI生成,可能存在错误,如有问题,请联系djs66256@163.com

visionOS 26 中的 SwiftUI 场景构建新特性解析

Apple 在 visionOS 26 中为开发者带来了一系列强大的场景构建新特性,这些改进为窗口、空间容器和沉浸式空间提供了更丰富的控制能力和更流畅的交互体验。本文将详细介绍这些新 API 的功能和应用场景。

生命周期管理增强

visionOS 26 引入了多项实用的生命周期管理 API,让开发者能够更精细地控制场景的启动和锁定行为。新的 restorationBehavior 修饰符允许开发者禁用特定场景的恢复功能。这在处理欢迎界面、一次性登录提示或与特定应用状态绑定的工具窗口时尤为实用。

WindowGroup("工具", id: "tools") {
    ToolsView()
}
.restorationBehavior(.disabled)

defaultLaunchBehavior 修饰符提供了更灵活的启动控制选项。开发者可以根据应用状态决定是否优先显示特定场景,或使用 .suppressed 行为防止次要窗口在不当时候自动恢复。

WindowGroup("欢迎页", id: "welcome") {
    WelcomeView()
        .onAppear {
            isFirstLaunch = false
        }
}
.defaultLaunchBehavior(isFirstLaunch ? .presented : .automatic)

空间容器优化

空间容器在 visionOS 26 中获得了多项增强功能。新的表面吸附特性允许窗口和空间容器智能地附着到物理环境表面,如墙面或桌面。通过 SurfaceSnappingInfo API,开发者可以获取吸附状态信息并做出相应调整。

@Environment(\.surfaceSnappingInfo) private var snappingInfo
@State private var hidePlatform = false

var body: some View { 
    RealityView { /* ... */ }
    .onChange(of: snappingInfo) {
        if snappingInfo.isSnapped &&
            SurfaceSnappingInfo.authorizationStatus == .authorized
        {
            switch snappingInfo.classification {
                case .table:
                    hidePlatform = true
                default:
                    hidePlatform = false
            }
        }
    }
}

新增的裁剪边距 API 允许开发者定义内容与容器边缘的安全距离,确保重要内容不会被遮挡。preferredWindowClippingMargins 和 windowClippingMargins 配合使用,可以创建既美观又实用的空间布局。

RealityView { content in
    // ...
    waterfall = createWaterfallEntity()
    content.add(waterfall)
} update: { content in
    waterfall.scale.y = Float(min(
        windowMargins.bottom / pointsPerMeter,
        maxWaterfallHeight))
    // ...
}
.preferredWindowClippingMargins(.bottom, maxWaterfallHeight * pointsPerMeter)

沉浸式体验升级

沉浸式空间在 visionOS 26 中获得了多项重要改进。onWorldRecenter 修饰符允许应用响应世界重新中心事件,确保虚拟内容始终保持在适当位置。

RealityView { content in
    // ...
}
.onWorldRecenter {
    recomputePositions()
}

沉浸风格现在支持更多自定义选项。渐进式沉浸风格可以设置特定的宽高比,而混合沉浸风格新增了与系统环境共存的模式。

ImmersiveSpace(id: "space") {
    ImmersiveView()
}
.immersionStyle(
    selection: $selectedStyle,
    in: .progressive(aspectRatio: .portrait))

最引人注目的是新增的 RemoteImmersiveSpace,它允许直接从 macOS 应用预览 Vision Pro 沉浸场景,为跨平台开发带来了新的可能性。

场景桥接技术

对于现有 UIKit 应用,visionOS 26 提供了场景桥接技术,使这些应用也能利用 SwiftUI 的空间容器和沉浸式空间功能。开发者可以通过继承 UIHostingSceneDelegate 来声明 SwiftUI 场景,并在 UIKit 环境中激活这些场景。

class MyHostingSceneDelegate: NSObject, UIHostingSceneDelegate {
    static var rootScene: some Scene {
        WindowGroup(id: "my-volume") {
            ContentView()
        }
        .windowStyle(.volumetric)
    }
}

总结

visionOS 26 为场景构建带来了大量创新功能,从精细的生命周期控制到智能的空间适配,再到跨平台沉浸式体验预览,这些改进显著提升了开发效率和用户体验。开发者现在可以创建更加智能、自然且与物理环境和谐共处的虚拟内容。

相关视频

小组件的新功能
搭配使用更出色:SwiftUI 和 RealityKit
用于打造沉浸式 App 的 Metal 渲染的新功能

文档

采用持久化 UI 的最佳实践