JabberwockyHTKit 0.8.4

JabberwockyHTKit 0.8.4

Jonathan Hoag 维护。



  • 作者
  • Jonathan Hoag 和 Aaron Chavez

Jabberwocky Head Tracking Kit for iOS

GitHub tag (latest SemVer) Platform GitHub

任何 iOS 应用程序的头部跟踪光标!

htkit-demo

功能

  • 头部跟踪光标
  • 眨眼或暂停点击
  • 易于使用设置
  • < 10 行配置现有应用
  • 与模拟器兼容(不会启用)
  • 与 iOS 9.0 及以上部署目标兼容。
    • 目前可在 iOS 11.0 及以上版本上启用。
  • 与现有 UI 元素交互
    • UIControl
    • UICollectionViewCell
    • UITableViewCell
    • 可扩展自 UIView 的子类
  • 插件架构(HTFeature)

从源代码构建 JabberwockyHTKit

要从源代码构建并运行 JabberwockyHTKit,请按照以下步骤操作。《BasicTutorial》是一个示例应用程序目标,它有一个标准的 UIButton,它会在屏幕上被点击时做出响应。在现有应用程序中配置头部跟踪时,需要执行一些设置步骤。一旦 JabberwockyHTKit 被配置并启用,配置并启用的默认 HTFeature 单例将自动检测 UIControlUICollectionViewCellUITableViewCell 元素并与之交互。其他自定义 UIView 元素可以通过实现 HTFocusable 协议来配置,以便与头部跟踪框架一起使用。

第一步:结账

  • 从源代码检查出来
git clone [email protected]:swiftablellc/jabberwocky-head-tracking-kit-ios.git && cd jabberwocky-head-tracking-kit-ios.git

第二步:构建框架

  • 使用JabberwockyHTKit.xcodeproj打开XCode
  • 选择JabberwockyHTKit方案,以及任何设备/模拟器,然后在XCode中运行。

第三步:运行教程

  • 选择BasicTutorial方案,并在支持FaceID的设备上运行。

注意事项

  • *-LocalDev方案是用于同时开发JabberwockyHTKitJabberwockyARKitEngine的。这不是一个常见的用例,所以可以安全地忽略这些方案。
  • *-PodsOnly方案从CocoaPods获取所有依赖关系,因此对于局部开发JabberwockyHTKit不是非常有用,但它是尝试在现有应用程序中查看cocoapods如何工作的好方法。要使用这些方案,您需要执行pod install并在使用.xcworkspace文件打开Xcode。

将头部跟踪添加到现有应用程序中

第 1 步:安装 JabberwockyHTKit 框架

  • 创建一个 Podfile 并将 $YOUR_TARGET 替换为适当的目标
source 'https://github.com/CocoaPods/Specs.git'

use_frameworks!

platform :ios, '12.0'

target '$YOUR_TARGET' do
  pod 'JabberwockyHTKit', '~> 0.8.4'
end
  • 使用 CocoaPods 安装依赖。如果您尚未安装 CocoaPods,请先安装 CocoaPods
pod install
  • 警告:请务必使用 *.xcworkspace 打开项目,而不是 .xcodeproj,否则会出现找不到 Pods 的错误。

第 2 步:将相机权限添加到 *-Info.plist

  • NSCameraUsageDescription 添加到您的 $PROJECT-Info.plist 文件中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
    <key>NSCameraUsageDescription</key>
    <string>Uses Camera to provide Head Tracking</string>
...
</dict>
</plist>

第 3 步:在代码中配置 JabberwockyHTKit

  • 可以在应用程序完成启动后任何时间配置和启用头部跟踪。

Swift

import AVFoundation
import JabberwockyARKitEngine
import JabberwockyHTKit

...

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        AVCaptureDevice.requestAccess(for: .video) { (granted) in
            if (granted) {
                // Configure the default HTFeatures and enable Head Tracking
                DispatchQueue.main.async {
                    HeadTracking.configure(withEngine: ARKitHTEngine.self)
                    HeadTracking.shared.enable()
                }
            } else {
                NSLog("Head Tracking requires camera access.")
            }
        }
        return true
    }
  • 警告:如果您正在构建一个新的 Swift 项目(具有 SceneDelegate),则需要修改额外的文件!引擎将被正确配置,但头部跟踪光标不会显示,因为未正确分配 UIWindowScene。请按以下方式修改 SceneDelegate.swift
import JabberwockyHTKit

...

    func sceneDidBecomeActive(_ scene: UIScene) {
        // Called when the scene has moved from an inactive state to an active state.
        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
        if let windowScene = scene as? UIWindowScene {
            HeadTracking.shared.windowScene = windowScene
        }
    }

SwiftUI

  • SwiftUI 仅部分支持(目前在 SwiftUI 中,内省和事件的处理程序触发的编程是难以实现的)。例如,和 iOS 13 以前的 Swift 非常相似的实施方法,可以在 SwiftUI 教程 SceneDelegate 中找到。需要为 Jabberwocky 的 HeadTracking 单例提供 UIWindowScene,以便 Jabberwocky 可以正确管理 UIWindow 栈。
  • SwiftUI 集成需要更改上述文档中提到的 AppDelegate.swiftSceneDelegate.swift

Objective C

#import <AVFoundation/AVFoundation.h>
#import <JabberwockyARKitEngine/JabberwockyARKitEngine.h>
#import <JabberwockyHTKit/JabberwockyHTKit.h>

...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
        NSLog(@"Requested Camera Permission");
        if(granted){
            dispatch_async(dispatch_get_main_queue(), ^{
                [HeadTracking configureWithEngine:[ARKitHTEngine class] withFeatures:HeadTracking.DEFAULT_FEATURES withSettingsAppGroup:nil];
                [HeadTracking.shared enableWithCompletion: ^(BOOL success) {}];
            });
        } else {
            NSLog(@"Camera Permissions Missing for Head Tracking");
        }
    }];
    return YES;
}

步骤 4:运行

  • 如果您在支持 FaceID 的物理设备上运行,您应该得到以下类似的 XCode 输出。
Basic[19446:10081868] Requested Camera Permission
...
Basic[19446:10081868] Head Tracking configured successfully.
Basic[19446:10081868] Metal API Validation Enabled
Basic[19446:10081868] Head Tracking enabled successfully.
  • 如果您在模拟器或不支持 FaceID 的设备上运行,您应该得到以下类似的 XCode 输出。由于 JabberwockyARKitEngine.xcframework 二进制文件包含 i386 和 x86_64 架构模块,因此 simulator 运行时不会崩溃。
Basic[2476:18033900] Requested Camera Permission
Basic[2476:18033900] Head Tracking cannot be configured. It is not supported on this device.
Basic[2476:18033900] Head Tracking is not configured. Use HeadTracking.configure() to configure.

发布说明(Swiftable 开发者)

关于

Jabberwocky® Head Tracking Kit (JabberwockyHTKit) 是一个开源的 iOS 框架,由 Swiftable LLC 开发,为现有 iOS 应用提供了无触摸界面。Jabberwocky 使得用户只需移动头部即可与应用程序进行交互。头部运动可翻译为屏幕上鼠标指针的移动。默认情况下,眨眼会触发一个 .touchUpInside 事件,模拟点击任何 UIControl 子类(事实上,任何 UIView 子类都可以扩展以响应用部手势触发)。

Jabberwocky 最初是为了作为 辅助工具 为像 ALS 或脊髓损伤(SCI)这样的运动障碍用户设计的,以使他们能够有效地与 iOS 设备交互。目前,Jabberwocky 需要 ARKit,并且仅支持同时支持 FaceID 的设备。支持的设备包括

  • iPhone X 及以上型号
  • 搭载A12X仿生芯片的iPad Pro型号

截至iOS 13,为与Jabberwocky支持的相同设备型号,Head Tracking Accessibility功能已添加到iOS Switch Control。需要注意的是,iOS Head Tracking可以配置为在类似容量下运行,但它在操作系统级别提供。尽管iOS Head Tracking Accessibility在整个设备上工作,但其与Switch Control的紧密耦合、复杂的设置和有限的功能集使其对许多用户来说不适合。Jabberwocky支持对应用程序中的Head Tracking进行自定义并提供自定义事件挂钩。

应用程序

JabberwockyHTKit目前正在以下应用程序在App Store中使用

依赖项

JabberwockyHTKit除了JabberwockyARKitEngine之外,不需要其他非Apple框架。虽然JabberwockyHTKit是开源的,并按照Apache 2.0许可协议授权,但它依赖于JabberwockyARKitEngine,它是一个封闭源代码,按照Permissive Binary License授权。可以在满足许可协议条件的二进制形式下重新分发,不进行修改。

JabberwockyHTKit可在Jabberwocky CocoaPods Spec Repo中找到,同时也可在CocoaPods Trunk Repo中找到。

商标

Jabberwocky® 是Swiftable LLC的注册商标。

许可证

Apache 2.0许可证