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

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables