#ios #swift #iphone #haptic-feedback
#iOS #swift #iPhone #тактильная обратная связь
Вопрос:
Теперь у меня есть расширение, чтобы заставить устройство вибрировать из любого места в приложении:
extension UIDevice {
static func vibrate(style: UINotificationFeedbackGenerator.FeedbackType) {
guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else {
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
return
}
let generator = UINotificationFeedbackGenerator()
generator.notificationOccurred(style)
}
}
Проблема связана с устройствами, использующими тактильные ощущения. Теперь я использую style as warning
, но вибрация устройства очень слабая, даже не заметна. Есть ли другой способ заставить устройство вибрировать 2 раза или более интенсивно?
Я пробовал разные стили вибрации в коде, но вибрация все еще очень слабая.
Комментарии:
1. Больше интереса? Или более интенсивной?
2. извините, более интенсивный
3. Вы всегда можете использовать
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
довольно сильную вибрацию.
Ответ №1:
В CoreHaptic есть функция для этого, вот руководство
// Create an intensity parameter:
let intensity = CHHapticEventParameter(parameterID: .hapticIntensity,
value: initialIntensity)
// Create a sharpness parameter:
let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness,
value: initialSharpness)
// Create a continuous event with a long duration from the parameters.
let continuousEvent = CHHapticEvent(eventType: .hapticContinuous,
parameters: [intensity, sharpness],
relativeTime: 0,
duration: 100)
do {
// Create a pattern from the continuous haptic event.
let pattern = try CHHapticPattern(events: [continuousEvent], parameters: [])
// Create a player from the continuous haptic pattern.
continuousPlayer = try engine.makeAdvancedPlayer(with: pattern)
} catch let error {
print("Pattern Player Creation Error: (error)")
}
continuousPlayer.completionHandler = { _ in
DispatchQueue.main.async {
// Restore original color.
self.continuousPalette.backgroundColor = self.padColor
}
}