2017-11-17 16 views
6

मैंने सेब घड़ी के लिए एक आवेदन बना दिया है। तर्क यह है कि जब उपयोगकर्ता अपना हाथ बढ़ाता है और ऐप से बटन टैप करता है। उस समय मैं एक्सेलेरोमीटर मान लाऊंगा। और जब भी उपयोगकर्ता अपना हाथ बढ़ाता है और कब्जा कर लिया जाता है, तो मुझे आईफोन को संदेश भेजना पड़ता है।एक्सेलेरोमीटर और गुरुत्वाकर्षण का उपयोग करके सेब घड़ी की स्थिति का पता लगाने के लिए कैसे?

मेरे लिए मूल्य सही तरीके से प्राप्त हो रहा है लेकिन, यह हमेशा एक्सेलेरोमीटर के आधार पर मान देगा। जिसका अर्थ है कि उपयोगकर्ता हाथ नहीं बढ़ाता है लेकिन एक्सेलेरोमीटर मान मेल खाते हैं। तो मूल्य मोबाइल को भेजे जाएंगे।

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 
     } 
    } 

कृपया मुझे मूल्य प्राप्त करने के लिए मार्गदर्शन करें जब उपयोगकर्ता ने स्थिति को पकड़ लिया।

+0

निम्नलिखित पर लागू होता है: https://forums.developer.apple.com/thread/3657 – fishinear

+0

मुझे आपका प्रश्न ठीक से नहीं मिला। जब उपयोगकर्ता अपने हाथ बढ़ाते हैं और एक बटन टैप करते हैं, तो आप एक्सेलेरोमीटर जानकारी संग्रहीत कर रहे हैं। क्या आप एक्सेलेरोमीटर जानकारी की तुलना और मिलान करना चाहते हैं, यदि उपयोगकर्ता फिर से हाथ बढ़ाए? –

उत्तर

0

एक्सीलरोमीटर एक्स, वाई-साथ वेग में परिवर्तन को मापने, और z

लाई जा रही है एक्सीलरोमीटर डेटा अक्ष

let motion = CMMotionManager() 

func startAccelerometers() { 
    // Make sure the accelerometer hardware is available. 
    if self.motion.isAccelerometerAvailable { 
     self.motion.accelerometerUpdateInterval = 1.0/60.0 // 60 Hz 
     self.motion.startAccelerometerUpdates() 

     // Configure a timer to fetch the data. 
     self.timer = Timer(fire: Date(), interval: (1.0/60.0), 
          repeats: true, block: { (timer) in 
           // Get the accelerometer data. 
           if let data = self.motion.accelerometerData { 
            let x = data.acceleration.x 
            let y = data.acceleration.y 
            let z = data.acceleration.z 

            // Use the accelerometer data in your app. 
           } 
          }) 

     // Add the timer to the current run loop. 
     RunLoop.current.add(self.timer!, forMode: .defaultRunLoopMode) 
    } 
} 

महत्वपूर्ण

अपने अनुप्रयोग accelerometer की उपस्थिति पर निर्भर करता है, तो हार्डवेयर, एक्सेलेरोमीटर मान के साथ अपनी Info.plist फ़ाइल की UIRequiredDeviceCapabilities कुंजी को कॉन्फ़िगर करें। इस कुंजी के अर्थ के बारे में अधिक जानकारी के लिए, सूचना संपत्ति सूची कुंजी संदर्भ देखें।

+0

उत्तर के लिए धन्यवाद। मैं इसे जांचूंगा और आपको बता दूंगा। – Sabs

संबंधित मुद्दे

 संबंधित मुद्दे