2017-11-17 14 views
6

Tôi đã tạo một ứng dụng cho đồng hồ quả táo. Logic là khi người dùng giơ tay lên và nhấn vào nút từ ứng dụng. Vào thời điểm đó tôi sẽ tìm nạp các giá trị gia tốc kế. Và bất cứ khi nào người dùng giơ tay lên và gặp vị trí bị bắt, tôi phải gửi tin nhắn cho iPhone.Làm thế nào để phát hiện vị trí đồng hồ của apple bằng cách sử dụng gia tốc và Trọng lực nhanh chóng?

Để tôi nhận được các giá trị chính xác Nhưng, Nó sẽ luôn cung cấp các giá trị dựa trên gia tốc kế. Điều đó có nghĩa là người dùng không tăng tay nhưng giá trị gia tốc phù hợp. Vì vậy, các giá trị sẽ gửi đến thiết bị di động.

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

Vui lòng hướng dẫn tôi chỉ lấy giá trị khi người dùng nắm bắt vị trí.

+0

Điều sau đây dường như có thể áp dụng cho bạn: https://forums.developer.apple.com/thread/3657 – fishinear

+0

Tôi không nhận được câu hỏi của bạn một cách chính xác. Khi người dùng giơ tay lên và nhấn vào một nút, bạn đang lưu trữ thông tin gia tốc kế. Bạn có muốn so sánh và so khớp thông tin gia tốc, nếu người dùng lại giơ tay? –

Trả lời

0

Gia tốc kế đo những thay đổi trong vận tốc dọc theo x, y, và z trục

dữ liệu tốc Tìm nạp các

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

quan trọng

Nếu ứng dụng của bạn dựa vào sự hiện diện của gia tốc kế phần cứng, cấu hình khóa UIRequiredDeviceCapabilities của tệp Info.plist của nó với giá trị gia tốc kế. Để biết thêm thông tin về ý nghĩa của khóa này, hãy xem Tham chiếu khóa danh sách thuộc tính thông tin.

+0

Cảm ơn bạn đã trả lời. Tôi sẽ kiểm tra điều này và cho bạn biết. – Sabs

Các vấn đề liên quan