SwiftHaptics Swift

SwiftHaptics 是一个跨平台的 Swift 包,旨在通过简单而强大的 API 提供高级触觉反馈。

安装

使用 Swift Package Manager 将 https://github.com/jochenbernard/swift-haptics 添加到你的项目中。

用法

播放基本触觉模式

使用 haptics 视图修饰符可以轻松地从你的 SwiftUI 视图触发触觉模式。你可以向 haptics 提供一个 Equatable 触发器和一个 HapticPattern 或一个 HapticPatternBuilder。当提供的触发器值发生变化时,将播放触觉模式。

var body: some View {
    someView
        .haptics(trigger: trigger) {
            TransientHapticEvent(time: 0.0)

            ContinuousHapticEvent(
                time: 0.5,
                duration: 0.5
            )
        }
}

创建高级触觉模式

SwiftHaptics 提供了两种基本的触觉事件,它们是创建触觉模式的构建块:TransientHapticEventContinuousHapticEvent。瞬时事件是短暂的脉冲,而连续事件是任意长度的循环波形。

使用这两种基本的触觉事件,你可以通过遵循 HapticPattern 协议来创建自定义的、更高级的触觉模式。HapticPattern 必须定义一个 pattern 属性,它是一个 HapticPatternBuilder,以提供其底层模式。这些构建器也支持 if 语句、switch 语句和 for 循环。

struct MyHapticPattern: HapticPattern {
    var pattern: HapticPattern {
        TransientHapticEvent(time: 0.0)

        ContinuousHapticEvent(
            time: 0.5,
            duration: 0.5
        )
    }
}

修改触觉模式

触觉模式也支持修饰符。

var body: some View {
    someView
        .haptics(trigger: trigger) {
            MyHapticPattern()
                .scale(
                    intensity: 0.5,
                    sharpness: 2.0
                )
                .speed(2.0)
                .delay(1.0)
                .muted(!playHaptics)
        }
}

创建自定义触觉模式修饰符

你还可以通过遵循 HapticPatternModifier 协议来实现自定义的触觉模式修饰符。HapticPatternModifier 必须定义一个 pattern 函数,它是一个 HapticPatternBuilder,接收原始的 HapticPattern 并返回修改后的 HapticPattern

要将 HapticPatternModifier 应用于 HapticPattern,请使用 modifier 函数。

struct MyHapticPatternModifier: HapticPatternModifier {
    func pattern(pattern: HapticPattern) -> HapticPattern {
        pattern
            .scale(
                intensity: 2.0,
                sharpness: 2.0
            )
            .speed(2.0)
    }
}

extension HapticPattern {
    func myModifier() -> HapticPattern {
        modifier(MyHapticPatternModifier())
    }
}

接下来,自定义修饰符可以如下使用

MyHapticPattern()
    .myModifier()

在 SwiftUI 之外播放触觉模式

SwiftHaptics 也可以在 SwiftUI 之外使用,方法是创建一个 HapticEngine 实例并使用其 play 方法。你可以向 play 提供一个 HapticPattern 或一个 HapticPatternBuilder

let hapticEngine = HapticEngine()
hapticEngine.play {
    TransientHapticEvent(time: 0.0)

    ContinuousHapticEvent(
        time: 0.5,
        duration: 0.5
    )
}