アップルウォッチ用のアプリケーションを作成しています。ロジックは、ユーザが手を上げてアプリからボタンをタップしたときのことです。その時、私は加速度計の値を取得します。そしてユーザーが自分の手を上げてキャプチャした位置を満たすたびに、iPhoneにメッセージを送信する必要があります。加速度計と重力を使用して迅速にリンゴの腕時計の位置を検出するにはどうすればいいですか?
私は値を正しく取得していますが、それは常に加速度計に基づいて値を与えます。つまり、ユーザーは手を上げず、加速度計の値が一致します。値はモバイルに送信されます。
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
}
}
ユーザーが位置を取得したときにのみ値を取得するように案内してください。
以下はあなたに当てはまると思われます:https://forums.developer.apple.com/thread/3657 – fishinear
私は正確にあなたの質問を得ていません。ユーザーが手を上げてボタンをタップすると、加速度計情報が保存されます。あなたは、加速度計の情報を比較し、一致させたいのですか? –