UINotificationFeedbackGenerator

#swift #swiftui

Вопрос:

Я испытал странное тактильное поведение на iPhone6s / iOS 14.3.

 UINotificationFeedbackGenerator()
amp;
UIImpactFeedbackGenerator()
 

не производите никаких вибраций

пока

  AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
 

сделай это.

Я подтвердил с помощью того же простого кода на iPhone XR, где работают оба.

 import SwiftUI
import AVFoundation

struct ContentView: View {
    
      func simpleSuccess() {
           let generator = UINotificationFeedbackGenerator()
           generator.notificationOccurred(.error)
      }

      func otherVibration() {
           print("#")
           AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
      }

      var body: some View {
           VStack {
                Text("UINotificationFeedbackGenerator")
                .onTapGesture(perform: simpleSuccess)
                .padding(.bottom, 60)
                Text("AudioServicesPlayAlertSound")
                .onTapGesture(perform: otherVibration)
            }
      }
}
 

Комментарии:

1. Какова ваша прегунта? Это «У кого-нибудь есть такая же проблема»? Это «Как я могу сообщить об ошибке в Apple, Inc»? Или это «Есть ли обходной путь»?

2. Ты прав @ElTomato. Я завершил свой титул в соответствии с вашим предложением.

3. Нажмите на «поддерживаемые модели» по следующему адресу. support.apple.com/en-hk/guide/iphone/iph07c867f28/ios

4. Вам бы помогло это мое сообщение в блоге: biteinteractive.com/finishing-touches-haptics

Ответ №1:

По словам Apple, не все модели поддерживают тактильную обратную связь. iPhone 6S этого не поддерживает.

Ответ №2:

Я нашел хороший способ узнать, поддерживает ли модель тактильные характеристики или нет

 import CoreHaptics

print(CHHapticEngine.capabilitiesForHardware().supportsHaptics ? "Yes" : "No")
 

Комментарии:

1. Вы действительно запустили свой код? Если я запускаю его с помощью симулятора под iOS 14.4, я получаю «Нет». Интересно, дело только в том, чтобы запустить его на реальном устройстве?

2. Да, я запустил его на реальном устройстве. Он говорит «Нет», как и ожидалось.