मैंने सेब घड़ी के लिए एक आवेदन बना दिया है। तर्क यह है कि जब उपयोगकर्ता अपना हाथ बढ़ाता है और ऐप से बटन टैप करता है। उस समय मैं एक्सेलेरोमीटर मान लाऊंगा। और जब भी उपयोगकर्ता अपना हाथ बढ़ाता है और कब्जा कर लिया जाता है, तो मुझे आईफोन को संदेश भेजना पड़ता है।एक्सेलेरोमीटर और गुरुत्वाकर्षण का उपयोग करके सेब घड़ी की स्थिति का पता लगाने के लिए कैसे?
मेरे लिए मूल्य सही तरीके से प्राप्त हो रहा है लेकिन, यह हमेशा एक्सेलेरोमीटर के आधार पर मान देगा। जिसका अर्थ है कि उपयोगकर्ता हाथ नहीं बढ़ाता है लेकिन एक्सेलेरोमीटर मान मेल खाते हैं। तो मूल्य मोबाइल को भेजे जाएंगे।
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
मुझे आपका प्रश्न ठीक से नहीं मिला। जब उपयोगकर्ता अपने हाथ बढ़ाते हैं और एक बटन टैप करते हैं, तो आप एक्सेलेरोमीटर जानकारी संग्रहीत कर रहे हैं। क्या आप एक्सेलेरोमीटर जानकारी की तुलना और मिलान करना चाहते हैं, यदि उपयोगकर्ता फिर से हाथ बढ़ाए? –