回顾iOS - CoreHaptics 框架的应用

什么是Core Haptics

iOS 平台上的 Core Haptics 框架提供了高级的触觉反馈功能,使开发者可以创建复杂且精细的触觉体验。这在游戏、健康应用和其他需要物理反馈的应用中非常有用。

核心概念

  • Haptic Engine:触觉引擎,管理触觉反馈的播放。
  • Pattern:触觉模式,由一系列触觉事件组成。
  • Event:触觉事件,定义触觉反馈的具体行为。

1. 检查设备支持

swift 复制代码
import CoreHaptics

func supportsHaptics() -> Bool {
    return CHHapticEngine.capabilitiesForHardware().supportsHaptics
}

2. 创建 Haptic Engine

创建并配置触觉引擎。

swift 复制代码
import CoreHaptics

var hapticEngine: CHHapticEngine?

func createHapticEngine() {
    do {
        hapticEngine = try CHHapticEngine()
        try hapticEngine?.start()
    } catch let error {
        print("Haptic Engine Creation Error: \(error)")
    }
}

3. 定义触觉模式

使用 CHHapticEventCHHapticPattern 来定义触觉模式。

swift 复制代码
func createHapticPattern() -> CHHapticPattern? {
    let event1 = CHHapticEvent(eventType: .hapticContinuous,
                               parameters: [
                                 CHHapticEventParameter(parameterID: .hapticIntensity, value: 1.0),
                                 CHHapticEventParameter(parameterID: .hapticSharpness, value: 1.0)
                               ],
                               relativeTime: 0,
                               duration: 1.0)

    do {
        let pattern = try CHHapticPattern(events: [event1], parameters: [])
        return pattern
    } catch let error {
        print("Haptic Pattern Creation Error: \(error)")
        return nil
    }
}

4. 播放触觉模式

将定义好的触觉模式加载到触觉引擎并播放。

swift 复制代码
func playHapticPattern() {
    guard supportsHaptics() else { return }

    do {
        let pattern = createHapticPattern()
        let player = try hapticEngine?.makePlayer(with: pattern!)
        try player?.start(atTime: CHHapticTimeImmediate)
    } catch let error {
        print("Haptic Playback Error: \(error)")
    }
}

示例代码整合

完整示例代码如下:

swift 复制代码
import CoreHaptics
import UIKit

class ViewController: UIViewController {
    var hapticEngine: CHHapticEngine?

    override func viewDidLoad() {
        super.viewDidLoad()
        createHapticEngine()
        playHapticPattern()
    }

    func supportsHaptics() -> Bool {
        return CHHapticEngine.capabilitiesForHardware().supportsHaptics
    }

    func createHapticEngine() {
        guard supportsHaptics() else { return }

        do {
            hapticEngine = try CHHapticEngine()
            try hapticEngine?.start()
        } catch let error {
            print("Haptic Engine Creation Error: \(error)")
        }
    }

    func createHapticPattern() -> CHHapticPattern? {
        let event1 = CHHapticEvent(eventType: .hapticContinuous,
                                   parameters: [
                                     CHHapticEventParameter(parameterID: .hapticIntensity, value: 1.0),
                                     CHHapticEventParameter(parameterID: .hapticSharpness, value: 1.0)
                                   ],
                                   relativeTime: 0,
                                   duration: 1.0)

        do {
            let pattern = try CHHapticPattern(events: [event1], parameters: [])
            return pattern
        } catch let error {
            print("Haptic Pattern Creation Error: \(error)")
            return nil
        }
    }

    func playHapticPattern() {
        guard supportsHaptics() else { return }

        do {
            let pattern = createHapticPattern()
            let player = try hapticEngine?.makePlayer(with: pattern!)
            try player?.start(atTime: CHHapticTimeImmediate)
        } catch let error {
            print("Haptic Playback Error: \(error)")
        }
    }
}

我在实际使用中的困惑与解答

CHHapticEvent

CHHapticEvent.EventType

.hapticContinuous:
  • 描述:创建一个持续的触觉事件。
  • 用途:用于需要一段时间内持续感知的触觉反馈,例如引擎振动或持续的振动模式。
  • 示例
swift 复制代码
let hapticEvent = CHHapticEvent(eventType: .hapticContinuous,
                                parameters: [],
                                relativeTime: 0,
                                duration: 1.0) // 持续1秒
.hapticTransient:
  • 描述:创建一个瞬时的触觉事件。
  • 用途:用于短促、快速的触觉反馈,例如点击或敲击的感觉。
  • 示例
swift 复制代码
let hapticEvent = CHHapticEvent(eventType: .hapticTransient,
                                parameters: [],
                                relativeTime: 0)
.audioContinuous:
  • 描述:创建一个持续的音频事件。
  • 用途:用于需要一段时间内持续播放的音频,例如背景音效或持续的音频警告。
  • 示例
swift 复制代码
let audioEvent = CHHapticEvent(eventType: .audioContinuous,
                               parameters: [],
                               relativeTime: 0,
                               duration: 1.0) // 持续1秒
.audioCustom:
  • 描述:创建一个自定义的音频事件。
  • 用途:用于播放自定义的音频文件。
  • 示例
swift 复制代码
// 需要提供自定义音频的URL
let audioURL = URL(fileURLWithPath: "path/to/audio/file")
let audioEvent = CHHapticEvent(eventType: .audioCustom,
                               parameters: [],
                               relativeTime: 0,
                               duration: 1.0) // 持续1秒
// 具体实现可能需要加载和处理音频文件

CHHapticEventParameter

.hapticIntensity:

触觉强度:它的可选范围是0~1.0。它控制着手机触觉事件的强度。

.hapticSharpness:

触觉敏锐:它的可选范围是0~1.0。它控制着手机触觉事件的频率。

other:

除了这俩个常用的参数外,还有其他的参数控制,因为业务中没有接触,所以我没有去深入了解。

relativeTime

用于控制触觉事件的相对开始时间,简单理解就是延迟多少秒开始执行触控事件。

duration

触觉事件响应时长。

CHHapticPatternPlayer

通过 let player = try hapticEngine?.makePlayer(with: pattern!),可以得到一个CHHapticPatternPlayer对象,是一个基础的模式播放器,用于播放简单的触觉模式。

它的功能相对有限,适用于基本的触觉反馈需求。包含开始 结束 取消 等操作

CHHapticAdvancedPatternPlayer

CHHapticAdvancedPatternPlayerCHHapticPatternPlayer 的高级版本,提供了更多的控制功能,适用于需要精细控制的复杂触觉模式。

swift 复制代码
/// 播放触觉模式
   func playHapticPattern(_ pattern: CHHapticPattern, completionHandler: @escaping ((any Error)?) -> Void) {
       createHapticEngine()
       guard supportsHaptics() else { return }
       do {
           player = try hapticEngine?.makeAdvancedPlayer(with: pattern)
           try player?.start(atTime: CHHapticTimeImmediate)
           player?.completionHandler = completionHandler
       } catch let error {
           print(error)
       }
   }

这样,我们就能在触觉事件中,得到一个事件回调。可以在事件结束后,做剩余的逻辑操作。

Core Haptics 在医学研究中的使用场景

1. 康复治疗

  • 物理康复:通过触觉反馈来指导患者进行正确的动作,帮助他们恢复肌肉力量和协调性。
  • 神经康复:为中风或脑损伤患者提供定向的触觉刺激,帮助重新建立大脑与身体之间的连接。
  • 手术康复:术后康复过程中,通过触觉反馈帮助患者逐步恢复手部精细运动技能。

2. 手术训练

  • 模拟手术:通过触觉反馈模拟真实手术环境,帮助外科医生在无风险的环境中练习复杂的手术。
  • 技能评估:利用触觉反馈评估外科医生的技能水平,确保他们具备必要的精确度和敏感度。

3. 疼痛管理

  • 分散注意力:通过特定的触觉刺激分散患者对疼痛的注意力,减少疼痛感知。
  • 疼痛评估:使用触觉反馈系统客观地评估患者的疼痛水平,帮助制定更有效的疼痛管理计划。

4. 心理治疗

  • 焦虑与压力管理:通过特定的触觉模式帮助患者放松,减轻焦虑和压力。
  • 情感调节:利用触觉反馈辅助情感调节,帮助患者更好地控制情绪波动。

5. 视力或听力障碍者辅助

  • 触觉替代:为视力或听力障碍者提供触觉替代方案,帮助他们感知和互动环境。
  • 导航辅助:通过触觉反馈系统提供导航帮助,帮助视障者在复杂环境中移动。

6. 手术辅助

  • 微创手术:在微创手术中,通过触觉反馈提供手术工具的实时位置和接触信息,提高手术的精确度。
  • 远程手术:在远程手术中,触觉反馈可以帮助外科医生更好地感知手术工具和组织之间的交互。

7. 诊断工具

  • 触觉诊断:通过触觉反馈系统模拟不同的病变和组织状态,帮助医生在虚拟环境中进行诊断训练。
  • 早期检测:利用触觉反馈辅助早期病变检测,提高诊断的准确性和及时性。

8. 生物反馈

  • 实时反馈:在生物反馈治疗中,通过触觉反馈向患者提供实时身体状态信息,帮助他们调整和优化自己的生理反应。
  • 自主神经系统训练:通过触觉反馈训练患者调节心率、呼吸和其他自主神经系统功能。

实例应用

  • 康复机器人:利用触觉反馈帮助患者进行精细的手部康复训练。
  • 虚拟现实治疗:结合虚拟现实技术,通过触觉反馈提供更真实的治疗体验。
  • 智能穿戴设备:配备触觉反馈功能的智能穿戴设备,提供实时健康监测和反馈

感悟

最后,我想说一下自己的一些体会。

在配合公司医学团队和算法团队研究的过程中,我深刻体会到了Apple作为全球最有价值公司的真正实力。Apple不仅在消费电子领域领先,其在我们平时所接触不到的医学和算法研究领域同样有着深入的研究与布局。这让我更加明白,Apple的成功绝不是偶然,而是源于其对各个领域的精细耕耘和创新驱动。这种全面而深入的研究与投入,进一步巩固了Apple在全球科技行业的领导地位。

相关推荐
泰迪智能科技0139 分钟前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Eric.Lee20212 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight2 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理
AI明说2 小时前
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
人工智能·语言模型·自然语言处理·数智药师·数智药学
Focus_Liu2 小时前
NLP-UIE(Universal Information Extraction)
人工智能·自然语言处理
PowerBI学谦2 小时前
使用copilot轻松将电子邮件转为高效会议
人工智能·copilot
audyxiao0012 小时前
AI一周重要会议和活动概览
人工智能·计算机视觉·数据挖掘·多模态
Jeremy_lf3 小时前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型