Ich habe eine Anwendung für Apple Watch erstellen. Die Logik ist, wenn der Benutzer die Hand hebt und einen Knopf aus der App antippt. Zu dieser Zeit werde ich die Beschleunigungsmesserwerte holen. Und immer wenn Benutzer ihre Hand erheben und die eingenommene Position treffen, muss ich eine Nachricht an das iPhone senden.Wie erkennt man die Position der Apple Watch mit Beschleunigungsmesser und Gravity in Swift?
Für mich sind die Werte richtig, aber, es wird immer die Werte basierend auf Beschleunigungsmesser geben. Was bedeutet, dass der Benutzer die Hand nicht hebt, aber die Beschleunigungsmesserwerte übereinstimmen. Werte werden also an Mobilgeräte gesendet.
func startUpadateAccelerometer() {
self.motionManager.accelerometerUpdateInterval = 1.0/10.0
self.motionManager.startAccelerometerUpdates(to: OperationQueue()) { (accelerometerData, error) -> Void in
guard accelerometerData != nil else
{
print("There was an error: \(String(describing: error))")
return
}
DispatchQueue.main.async {
if(self.can_reset){
let differenceX : Bool = self.validateButtom(currentValue: accelerometerData!.acceleration.x, inititalValue: self.gravityReference.x)
let differenceY : Bool = self.validateButtom(currentValue: accelerometerData!.acceleration.y, inititalValue: self.gravityReference.y)
if(differenceX && differenceY && self.gravityOffsetDifference(currentValue: accelerometerData!.acceleration.x, referenceValue: self.gravityReference.x) && self.gravityOffsetDifference(currentValue: accelerometerData!.acceleration.y, referenceValue: self.gravityReference.y)){
WKInterfaceDevice().play(.success)
// self.addLog(_logStr: EventsTypes.Achievements1.rawValue)
self.logString += String(format: "X: %0.3f Y: %0.3f Z: %0.3f \n", accelerometerData!.acceleration.x,accelerometerData!.acceleration.y,accelerometerData!.acceleration.z)
self.m_XYZValueLbl.setText(self.logString)
self.is_RechedZeroPos = true
self.session?.sendMessage(["msg" : "\(self.logString)"], replyHandler: nil) { (error) in
NSLog("%@", "Error sending message: \(error)")
}
} else {
if(self.checkAchievements2_3(deviceMotionData: accelerometerData!.acceleration) == true) {
if self.is_RechedZeroPos == true {
self.addLog(_logStr: EventsTypes.Achievements2.rawValue)
self.is_RechedZeroPos = false
} else {
self.addLog(_logStr: EventsTypes.Achievements3.rawValue)
}
}
}
} else {
self.gravityReference = accelerometerData!.acceleration
//self.logString = String(format: "Reference Acceleration %0.3f %0.3f %0.3f \n", self.gravityReference.x,self.gravityReference.y,self.gravityReference.z)
self.can_reset = true
}
}
}
}
func validateButtom(currentValue : Double , inititalValue : Double) -> Bool {
if(currentValue == 0 && inititalValue == 0) {
return true
} else if(currentValue < 0 && inititalValue < 0) {
return true
} else if(currentValue > 0 && inititalValue > 0) {
return true
} else {
return false
}
}
func gravityOffsetDifference(currentValue : Double , referenceValue: Double) -> Bool {
var difference : Double!
if (fabs(currentValue) <= fabs(referenceValue)) {
difference = fabs(referenceValue) - fabs(currentValue)
} else {
difference = fabs(currentValue) - fabs(referenceValue)
}
if (difference <= gravityOffset) {
return true
} else {
return false
}
}
Bitte führen Sie mich, um die Werte nur zu erhalten, wenn der Benutzer die Position erfasst.
Folgendes scheint für Sie zu gelten: https://forums.developer.apple.com/thread/3657 – fishinear
Ich habe Ihre Frage nicht genau erhalten. Wenn Benutzer ihre Hände heben und auf einen Knopf tippen, speichern Sie die Beschleunigungssensor-Informationen. Möchten Sie die Beschleunigungsmesserinfo vergleichen und abgleichen, wenn der Benutzer seine Hände wieder hebt? –