ARCoachingOverlayView

一个展示用来引导用户的可视化视图


声明

class ARCoachingOverlayView : UIView

概述

这个视图提供给你的用户一个标准化的自带流程。你可以在会话初始化和受限的追踪条件下配置这个视图来自动展示,当给予用户明确的引导时,ARKit的世界追踪也会达到最好的体验。

如下图片展示了用于水平和垂直平面的叠加视图,告知用户应该开始移动设备:

这些图片展示了叠加视图的含义,即用户应该继续移动手机或者改变他们移动的速度:

当你启动你的app时,指导叠加视图会要求用户通过移动设备来帮助ARKit建立追踪。当你选择一个特定的目标,例如找到一个平面,该视图便会将对应的引导显示出来。在指导叠加视图确定目标已经实现并且不需要更多的指导之后,它将会从用户的视图中隐藏。

使用了指导叠加视图的示例app,可以参见Placing Objects and Handling 3D Interaction

支持自动指导

默认情况,activatesAutomatically 是开启的,因此你应该重写coachingOverlayViewWillActivate(_:) 来决定指导是否应该存在与进程中。通过协调你的行动来帮助用户关注这些引导,举例来说,通过在会话重新初始化时隐藏任何无关的UI。

在终端之后重定位

如果重定位被启用(参照sessionShouldAttemptRelocalization(_:)),当有任意中断降级了你的app的追踪状态时,ARKit将会尝试恢复你的会话。在这个事件中,指导叠加视图将会展示出来,并给出用户引导来协助ARKit完成重定位。

返回之前的区域来恢复

此时,指导叠加视图包含了一个按钮,该按钮暗示用户相比恢复会话他们更应该重新开始。

当用户按了Start Over按钮后,ARKit将会通过调用你的代理的coachingOverlayViewDidRequestSessionReset(_:) 函数来通知你。当你的app需要任何自定义动作来重启AR体验时,你应该实现这个回调函数。

func coachingOverlayViewDidRequestSessionReset(_ coachingOverlayView: ARCoachingOverlayView) {    

    // Reset the session.
    let configuration = ARWorldTrackingConfiguration()
    configuration.planeDetection = [.horizontal, .vertical]
    session.run(configuration, options: [.resetTracking])

    // Custom actions to restart the AR experience. 
    // ...
}

如果你不实现coachingOverlayViewDidRequestSessionReset(_:)函数,指导叠加视图将会通过重置追踪来相应Start Over按钮,这样同时也会移除已经存在的所有锚点。

关于重定位的更多信息,参照Managing Session Lifecycle and Tracking Quality.

主题

代理事件(Delegating Events)

var delegate: ARCoachingOverlayViewDelegate? 用来实现指导事件回调的对象

protocol ARCoachingOverlayViewDelegate 一系列回调你实现用来接收指导事件的通知

定义一个目标(Defining a Goal)

var goal: ARCoachingOverlayView.Goal 一个用来表示app追踪需求的字段

enum ARCoachingOverlayView.Goal 表述你的app的追踪需求的可选项

激活视图(Activiting the View)

var activatesAutomatically: Bool 表述指导叠加视图是否自动激活的标志位,依赖于当前会话的状态。

var isActive: Bool 表述指导是否存在于进程中的标志位

func setActive(Bool, animated: Bool) 控制指导是否存在于进程中

提供会话(Providing the Session)

var session: ARSession? 视图使用来提供指导的会话

var sessionProvider: ARSessionProviding? 你指定的提供当前会话的对象