Impossible d'obtenir un retour haptique pour fonctionner avec Swift

Je suis un CS majeur à l'université qui a eu une idée pour une application Apple Watch qui vibre chaque fois qu'elle atteint un certain intervalle de temps, par exemple l'utilisateur sélectionne des intervalles de 20 secondes via un sélecteur, appuie sur "démarrer" et l'application démarre une minuterie de 0 à 20 et une fois qu'il atteint 20, je veux que la montre vibre et recommence à compter jusqu'à 20 jusqu'à ce que l'utilisateur choisisse de l'arrêter. Je veux l'utiliser pour que les coureurs aient une idée des allures constantes à courir. Le problème est que je n'arrive pas à faire fonctionner UIImpactFeedbackGenerator et aucune des autres méthodes de retour haptique non plus. Je n'ai aucune expérience rapide, seulement python et Java, mais j'ai pratiquement terminé, sauf pour cette partie haptique. La seule erreur que j'obtiens est que UIImpactFeedbackGenerator est hors de portée lorsque le générateur est déclaré sous SecondView. Merci d'avance! Ici'

import SwiftUI

struct ContentView: View {
@State var timerScreenShown = false
@State var timeVal = 10

var body: some View {
VStack{
Text("Select \(timeVal)s intervals").padding()
Picker(
selection: $timeVal,
label: Text("")){
ForEach(10...120, id: \.self) {
Text("\($0)")
}
}

NavigationLink(destination: SecondView(timerScreenShown: $timerScreenShown, timeVal: timeVal), isActive: $timerScreenShown, label: {Text("Go")})

}
}
}
struct SecondView: View{
@Binding var timerScreenShown:Bool
@State var timeVal = 10
@State var startVal = 0

var body: some View {
VStack{
if timeVal > 0 {
Text("Timer")
.font(.system(size: 14))
Text("\(startVal)")
.font(.system(size: 40))
.onAppear(){
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
if self.timeVal > 0{
self.startVal += 1
if self.timeVal == self.startVal{

let generator = UIImpactFeedbackGenerator(style:.medium)
generator.impactOccurred()

self.startVal = 0
}
}
}
}
Text("seconds")
.font(.system(size: 14))
Button(action: {
self.timerScreenShown = false
}) {
Text("Cancel")
.foregroundColor(.red)
}
} else {
Button(action: {
self.timerScreenShown = false
}) {
Text("Done")
.foregroundColor(.green)
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView()
ContentView()
}
}
}


Solution du problème

WatchOs a la méthode play(_:) - pour la notification.

essayer WKInterfaceDevice.current().play(.click)

pour plus d'informations, consultez la documentation -- https://developer.apple.com/documentation/watchkit/wkinterfacedevice/1628128-play

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"