无法使用触觉反馈 Swift
Cannot get Haptic Feedback to work with Swift
我是大学计算机科学专业的学生,有一个 Apple Watch 应用程序的想法,该应用程序在每次达到特定时间间隔时都会振动,例如用户通过选择器选择 20 秒的间隔,点击“开始”,然后该应用程序启动一个从 0 到 20 的计时器,一旦它达到 20 我希望手表振动 并再次开始计数到 20,直到用户选择停止它。我想用它来让 运行 的人了解 运行 的一致步调。问题是我无法让 UIImpactFeedbackGenerator 工作,也无法让其他触觉反馈方法 none 工作。我没有 swift 经验,只有 python 和 Java 但我基本上完成了这个触觉部分。我得到的一个错误是 UIImpactFeedbackGenerator 超出了生成器在 SecondView 下声明的范围。先感谢您!这是我的代码:
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("\([=11=])")
}
}
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()
}
}
}
WatchOs 确实有 play(_:) - 通知方法。
尝试WKInterfaceDevice.current().play(.click)
有关更多信息,请查看文档 -- https://developer.apple.com/documentation/watchkit/wkinterfacedevice/1628128-play
我是大学计算机科学专业的学生,有一个 Apple Watch 应用程序的想法,该应用程序在每次达到特定时间间隔时都会振动,例如用户通过选择器选择 20 秒的间隔,点击“开始”,然后该应用程序启动一个从 0 到 20 的计时器,一旦它达到 20 我希望手表振动 并再次开始计数到 20,直到用户选择停止它。我想用它来让 运行 的人了解 运行 的一致步调。问题是我无法让 UIImpactFeedbackGenerator 工作,也无法让其他触觉反馈方法 none 工作。我没有 swift 经验,只有 python 和 Java 但我基本上完成了这个触觉部分。我得到的一个错误是 UIImpactFeedbackGenerator 超出了生成器在 SecondView 下声明的范围。先感谢您!这是我的代码:
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("\([=11=])")
}
}
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()
}
}
}
WatchOs 确实有 play(_:) - 通知方法。
尝试WKInterfaceDevice.current().play(.click)
有关更多信息,请查看文档 -- https://developer.apple.com/documentation/watchkit/wkinterfacedevice/1628128-play