| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import * as AudioToolbox from "AudioToolbox";
- import * as UIKit from "UIKit";
- import { Thread } from "Foundation";
- /**
- * 触发设备震动
- * @param duration 震动持续时间,单位:毫秒(ms),仅在iOS 13.0+有效
- */
- export function vibrate(duration: number) {
- // 参数验证:确保duration为正数
- if (duration < 0) {
- duration = 0;
- }
- // 检查iOS版本,决定使用哪种震动方式
- if (UTSiOS.available("iOS 13.0, *")) {
- // 创建中等强度的触觉反馈生成器
- const generator = new UIKit.UIImpactFeedbackGenerator(
- (style = UIKit.UIImpactFeedbackGenerator.FeedbackStyle.medium)
- );
- // 准备生成器,提高首次触发的响应速度
- generator.prepare();
- // 记录开始时间
- const startTime = new Date().getTime();
- const endTime = startTime + duration;
- // 循环产生震动效果,直到达到指定时长
- while (new Date().getTime() < endTime) {
- // 触发触觉反馈,强度为0.5(中等强度)
- generator.impactOccurred((intensity = 0.5));
- // 暂停100毫秒,避免过于频繁的震动
- Thread.sleep((forTimeInterval = 0.1));
- }
- } else {
- // iOS 13.0以下版本:使用AudioToolbox播放系统震动音效
- // 注意:此方式无法控制震动时长,duration参数将被忽略
- AudioToolbox.AudioServicesPlayAlertSound(AudioToolbox.kSystemSoundID_Vibrate);
- }
- }
|