Retrieve Apple Pencil Pro Orientation, Roll outside of HoverPose?

I'm attempting to retrieve the values of the Pencil Pro using the new PencilHoverPose, however according to the documentation it appears these can only be accessed while in a hover state (0 to ~0.5" from the screen).

Is there a way to get the orientation or roll values of the Apple Pencil Pro outside of a hover? I'm attempting to use the pencil as an input device, necessitating it be farther from the screen than 0.5"

Below is a simple view I'm using to display the available values:

import SwiftUI
import UIKit

struct PencilSqueezeView: View {
    @State private var squeezeText: String = "Squeeze the Apple Pencil Pro"
    @State private var hoverDistance: CGFloat = 0.0
    @State private var anchor: UnitPoint = .center
    @State private var location: CGPoint = .zero
    @State private var altitude: Angle = .degrees(0)
    @State private var azimuth: Angle = .degrees(0)
    @State private var roll: Angle = .degrees(0)

    var body: some View {
        VStack {
            Text(squeezeText)
                .font(.largeTitle)
                .padding()

            Text("Hover Distance: \(String(format: "%.2f", hoverDistance))")
                .font(.title2)
                .padding()

            Text("Anchor: \(anchor)")
                .font(.title2)
                .padding()

            Text("Location: \(location.x), \(location.y)")
                .font(.title2)
                .padding()

            Text("Altitude: \(altitude.degrees)°")
                .font(.title2)
                .padding()

            Text("Azimuth: \(azimuth.degrees)°")
                .font(.title2)
                .padding()

            Text("Roll: \(roll.degrees)°")
                .font(.title2)
                .padding()

            Spacer()
        }
        .onPencilSqueeze { phase in
            handlePencilSqueeze(phase: phase)

            if case let .ended(value) = phase {
                if let hoverPose = value.hoverPose {
                    updateHoverPose(hoverPose)
                } else {
                    print("hoverPose is nil")
                }
            }
        }
        .padding()
    }

    private func handlePencilSqueeze(phase: PencilSqueezeGesturePhase) {
        switch phase {
        case .active:
            squeezeText = "Squeeze began"
        case .ended:
            squeezeText = "Squeeze ended"
        case .failed:
            squeezeText = "Squeeze failed"
        }
    }

    private func updateHoverPose(_ hoverPose: PencilHoverPose) {
        hoverDistance = hoverPose.zDistance
        anchor = hoverPose.anchor
        location = hoverPose.location
        altitude = hoverPose.altitude
        azimuth = hoverPose.azimuth
        roll = hoverPose.roll

        print("zDistance: \(hoverPose.zDistance)")
        print("anchor: \(hoverPose.anchor)")
        print("location: \(hoverPose.location)")
        print("altitude: \(hoverPose.altitude)")
        print("azimuth: \(hoverPose.azimuth)")
        print("roll: \(hoverPose.roll)")
    }
}

Hi and welcome to Developer Forums!

PencilHoverPose is only available while an Apple Pencil is hovering in the area above the view’s bounds when the squeeze gesture or a double-tap gesture occurs. If Apple Pencil is farther than its maximum hover distance, its hover pose is no longer available.

Check out our article on Apple Pencil and Scribble to learn more about the best practices of supporting Apple Pencil in your app.

Retrieve Apple Pencil Pro Orientation, Roll outside of HoverPose?
 
 
Q