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í.
Điều sau đây dường như có thể áp dụng cho bạn: https://forums.developer.apple.com/thread/3657 – fishinear
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? –