You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI 如何实现iPhone来电、闹钟场景下的系统振动效果

解决方案

方法1:调用系统标准振动(适配来电/定时器效果)

你当前使用的UINotificationFeedbackGenerator是系统提供的轻量级交互触觉反馈接口,天生设计为短时长、低强度的交互提示,无法实现来电、定时器触发时的强振动效果。你可以通过引入AudioToolbox框架调用系统级振动能力实现需求,该振动效果和静音模式下来电、时钟定时器的振动完全一致。

完整代码如下:

import SwiftUI
import AudioToolbox // 引入音频工具箱框架

struct ContentView: View {
    var body: some View {
        VStack{
            Button("Press") {
                // 调用系统标准振动
                AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
            }
        }
    }
}
  • 如果需要实现持续重复振动(和来电时连续振动效果一致),可以添加定时器循环调用上述方法,停止振动时销毁定时器即可。

方法2:自定义振动模式

如果你需要调整振动的节奏、强度、时长,可以使用CoreHaptics框架自定义振动参数,实现完全匹配需求的效果,示例代码如下:

import SwiftUI
import CoreHaptics

struct ContentView: View {
    // 触觉引擎实例
    private var hapticEngine: CHHapticEngine?
    
    init() {
        // 初始化触觉引擎
        guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else { return }
        do {
            hapticEngine = try CHHapticEngine()
            try hapticEngine?.start()
        } catch {
            print("触觉引擎初始化失败: \(error.localizedDescription)")
        }
    }
    
    var body: some View {
        VStack{
            Button("Press") {
                guard let engine = hapticEngine else { return }
                // 自定义振动参数:强度拉满,持续2秒
                let event = CHHapticEvent(eventType: .hapticContinuous, parameters: [
                    CHHapticEventParameter(parameterID: .hapticIntensity, value: 1),
                    CHHapticEventParameter(parameterID: .hapticSharpness, value: 0.5)
                ], relativeTime: 0, duration: 2)
                
                do {
                    let pattern = try CHHapticPattern(events: [event], parameters: [])
                    let player = try engine.makePlayer(with: pattern)
                    try player.start(atTime: CHHapticTimeImmediate)
                } catch {
                    print("振动播放失败: \(error.localizedDescription)")
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者swiftNewb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:51:02