diff --git a/MotionKit.swift b/MotionKit.swift index 06b7443..fa3b547 100644 --- a/MotionKit.swift +++ b/MotionKit.swift @@ -3,7 +3,7 @@ // MotionKit // // Created by Haroon on 14/02/2015. -// Launched under the Creative Commons License. You're free to use MotionKit. +// Launched under the Creative Commons License. You're free to use MotionKit. // // The original Github repository is https://github.com/MHaroonBaig/MotionKit // The official blog post and documentation is https://medium.com/@PyBaig/motionkit-the-missing-ios-coremotion-wrapper-written-in-swift-99fcb83355d0 @@ -60,20 +60,24 @@ class MotionKit { if manager.accelerometerAvailable { manager.accelerometerUpdateInterval = interval manager.startAccelerometerUpdatesToQueue(NSOperationQueue()) { - (data: CMAccelerometerData!, error: NSError!) in + (data: CMAccelerometerData?, error: NSError?) in if let isError = error { NSLog("Error: %@", isError) } - valX = data.acceleration.x - valY = data.acceleration.y - valZ = data.acceleration.z - if values != nil{ - values!(x: valX,y: valY,z: valZ) + if data != nil { + valX = data!.acceleration.x + valY = data!.acceleration.y + valZ = data!.acceleration.z + + if values != nil{ + values!(x: valX,y: valY,z: valZ) + } + + let absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) + self.delegate?.retrieveAccelerometerValues!(valX, y: valY, z: valZ, absoluteValue: absoluteVal) } - var absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) - self.delegate?.retrieveAccelerometerValues!(valX, y: valY, z: valZ, absoluteValue: absoluteVal) } } else { @@ -98,20 +102,24 @@ class MotionKit { if manager.gyroAvailable{ manager.gyroUpdateInterval = interval manager.startGyroUpdatesToQueue(NSOperationQueue()) { - (data: CMGyroData!, error: NSError!) in + (data: CMGyroData?, error: NSError?) in if let isError = error{ NSLog("Error: %@", isError) } - valX = data.rotationRate.x - valY = data.rotationRate.y - valZ = data.rotationRate.z - if values != nil{ - values!(x: valX, y: valY, z: valZ) + if data != nil { + valX = data!.rotationRate.x + valY = data!.rotationRate.y + valZ = data!.rotationRate.z + + if values != nil{ + values!(x: valX, y: valY, z: valZ) + } + + let absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) + self.delegate?.retrieveGyroscopeValues!(valX, y: valY, z: valZ, absoluteValue: absoluteVal) } - var absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) - self.delegate?.retrieveGyroscopeValues!(valX, y: valY, z: valZ, absoluteValue: absoluteVal) } } else { @@ -126,7 +134,7 @@ class MotionKit { * Starts magnetometer updates, providing data to the given handler through the given queue. * You can access the retrieved values either by a Trailing Closure or through a Delegate. */ - @availability(iOS, introduced=5.0) + @available(iOS, introduced=5.0) func getMagnetometerValues (interval: NSTimeInterval = 0.1, values: ((x: Double, y:Double, z:Double) -> ())? ){ var valX: Double! @@ -134,21 +142,25 @@ class MotionKit { var valZ: Double! if manager.magnetometerAvailable { manager.magnetometerUpdateInterval = interval - manager.startMagnetometerUpdatesToQueue(NSOperationQueue()){ - (data: CMMagnetometerData!, error: NSError!) in + manager.startMagnetometerUpdatesToQueue(NSOperationQueue()) { + (data: CMMagnetometerData?, error: NSError?) in if let isError = error{ NSLog("Error: %@", isError) } - valX = data.magneticField.x - valY = data.magneticField.y - valZ = data.magneticField.z - if values != nil{ - values!(x: valX, y: valY, z: valZ) + if data != nil { + valX = data!.magneticField.x + valY = data!.magneticField.y + valZ = data!.magneticField.z + + if values != nil{ + values!(x: valX, y: valY, z: valZ) + } + + let absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) + self.delegate?.retrieveMagnetometerValues!(valX, y: valY, z: valZ, absoluteValue: absoluteVal) } - var absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) - self.delegate?.retrieveMagnetometerValues!(valX, y: valY, z: valZ, absoluteValue: absoluteVal) } } else { @@ -171,16 +183,19 @@ class MotionKit { if manager.deviceMotionAvailable{ manager.deviceMotionUpdateInterval = interval - manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()){ - (data: CMDeviceMotion!, error: NSError!) in + manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()) { + (data: CMDeviceMotion?, error: NSError?) in if let isError = error{ NSLog("Error: %@", isError) } - if values != nil{ - values!(deviceMotion: data) + + if data != nil { + if values != nil{ + values!(deviceMotion: data!) + } + self.delegate?.retrieveDeviceMotionObject!(data!) } - self.delegate?.retrieveDeviceMotionObject!(data) } } else { @@ -200,21 +215,24 @@ class MotionKit { var valZ: Double! if manager.deviceMotionAvailable{ manager.deviceMotionUpdateInterval = interval - manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()){ - (data: CMDeviceMotion!, error: NSError!) in + manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()) { + (data: CMDeviceMotion?, error: NSError?) in if let isError = error{ NSLog("Error: %@", isError) } - valX = data.userAcceleration.x - valY = data.userAcceleration.y - valZ = data.userAcceleration.z - if values != nil{ - values!(x: valX, y: valY, z: valZ) - } + if data != nil { + valX = data!.userAcceleration.x + valY = data!.userAcceleration.y + valZ = data!.userAcceleration.z - self.delegate?.getAccelerationValFromDeviceMotion!(valX, y: valY, z: valZ) + if values != nil{ + values!(x: valX, y: valY, z: valZ) + } + + self.delegate?.getAccelerationValFromDeviceMotion!(valX, y: valY, z: valZ) + } } } else { @@ -228,28 +246,30 @@ class MotionKit { * method. */ func getGravityAccelerationFromDeviceMotion (interval: NSTimeInterval = 0.1, values: ((x:Double, y:Double, z:Double) -> ())? ) { - - var valX: Double! - var valY: Double! - var valZ: Double! if manager.deviceMotionAvailable{ manager.deviceMotionUpdateInterval = interval - manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()){ - (data: CMDeviceMotion!, error: NSError!) in + manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()) { + (data: CMDeviceMotion?, error: NSError?) in - if let isError = error{ + if let isError = error { NSLog("Error: %@", isError) } - valX = data.gravity.x - valY = data.gravity.y - valZ = data.gravity.z - if values != nil{ - values!(x: valX, y: valY, z: valZ) - } + if data != nil { + var valX: Double! + var valY: Double! + var valZ: Double! + + valX = data!.gravity.x + valY = data!.gravity.y + valZ = data!.gravity.z - var absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) - self.delegate?.getGravityAccelerationValFromDeviceMotion!(valX, y: valY, z: valZ) + if values != nil{ + values!(x: valX, y: valY, z: valZ) + } + + self.delegate?.getGravityAccelerationValFromDeviceMotion!(valX, y: valY, z: valZ) + } } } else { @@ -267,17 +287,20 @@ class MotionKit { if manager.deviceMotionAvailable{ manager.deviceMotionUpdateInterval = interval - manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()){ - (data: CMDeviceMotion!, error: NSError!) in + manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()) { + (data: CMDeviceMotion?, error: NSError?) in if let isError = error{ NSLog("Error: %@", isError) } - if values != nil{ - values!(attitude: data.attitude) - } - self.delegate?.getAttitudeFromDeviceMotion!(data.attitude) + if data != nil { + if values != nil{ + values!(attitude: data!.attitude) + } + + self.delegate?.getAttitudeFromDeviceMotion!(data!.attitude) + } } } else { @@ -297,22 +320,24 @@ class MotionKit { var valZ: Double! if manager.deviceMotionAvailable{ manager.deviceMotionUpdateInterval = interval - manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()){ - (data: CMDeviceMotion!, error: NSError!) in + manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()) { + (data: CMDeviceMotion?, error: NSError?) in if let isError = error{ NSLog("Error: %@", isError) } - valX = data.rotationRate.x - valY = data.rotationRate.y - valZ = data.rotationRate.z - if values != nil{ - values!(x: valX, y: valY, z: valZ) - } + if data != nil { + valX = data!.rotationRate.x + valY = data!.rotationRate.y + valZ = data!.rotationRate.z - var absoluteVal = sqrt(valX * valX + valY * valY + valZ * valZ) - self.delegate?.getRotationRateFromDeviceMotion!(valX, y: valY, z: valZ) + if values != nil { + values!(x: valX, y: valY, z: valZ) + } + + self.delegate?.getRotationRateFromDeviceMotion!(valX, y: valY, z: valZ) + } } } else { @@ -334,23 +359,26 @@ class MotionKit { var valAccuracy: Int32! if manager.deviceMotionAvailable{ manager.deviceMotionUpdateInterval = interval - manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()){ - (data: CMDeviceMotion!, error: NSError!) in + manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()) { + (data: CMDeviceMotion?, error: NSError?) in - if let isError = error{ + if let isError = error { NSLog("Error: %@", isError) } - valX = data.magneticField.field.x - valY = data.magneticField.field.y - valZ = data.magneticField.field.z - valAccuracy = data.magneticField.accuracy.value + if data != nil { + valX = data!.magneticField.field.x + valY = data!.magneticField.field.y + valZ = data!.magneticField.field.z + valAccuracy = data!.magneticField.accuracy.rawValue - if values != nil{ - values!(x: valX, y: valY, z: valZ, accuracy: valAccuracy) - } - self.delegate?.getMagneticFieldFromDeviceMotion!(valX, y: valY, z: valZ) + if values != nil { + values!(x: valX, y: valY, z: valZ, accuracy: valAccuracy) + } + + self.delegate?.getMagneticFieldFromDeviceMotion!(valX, y: valY, z: valZ) + } } } else { @@ -369,36 +397,36 @@ class MotionKit { /* MARK :- INSTANTANIOUS METHODS START HERE */ func getAccelerationAtCurrentInstant (values: (x:Double, y:Double, z:Double) -> ()){ - self.getAccelerationFromDeviceMotion(interval: 0.5) { (x, y, z) -> () in + self.getAccelerationFromDeviceMotion(0.5) { (x, y, z) -> () in values(x: x,y: y,z: z) self.stopDeviceMotionUpdates() } } func getGravitationalAccelerationAtCurrentInstant (values: (x:Double, y:Double, z:Double) -> ()){ - self.getGravityAccelerationFromDeviceMotion(interval: 0.5) { (x, y, z) -> () in + self.getGravityAccelerationFromDeviceMotion(0.5) { (x, y, z) -> () in values(x: x,y: y,z: z) self.stopDeviceMotionUpdates() } } func getAttitudeAtCurrentInstant (values: (attitude: CMAttitude) -> ()){ - self.getAttitudeFromDeviceMotion(interval: 0.5) { (attitude) -> () in + self.getAttitudeFromDeviceMotion(0.5) { (attitude) -> () in values(attitude: attitude) self.stopDeviceMotionUpdates() } - + } func getMageticFieldAtCurrentInstant (values: (x:Double, y:Double, z:Double) -> ()){ - self.getMagneticFieldFromDeviceMotion(interval: 0.5) { (x, y, z, accuracy) -> () in + self.getMagneticFieldFromDeviceMotion(0.5) { (x, y, z, accuracy) -> () in values(x: x,y: y,z: z) self.stopDeviceMotionUpdates() } } func getGyroValuesAtCurrentInstant (values: (x:Double, y:Double, z:Double) -> ()){ - self.getRotationRateFromDeviceMotion(interval: 0.5) { (x, y, z) -> () in + self.getRotationRateFromDeviceMotion(0.5) { (x, y, z) -> () in values(x: x,y: y,z: z) self.stopDeviceMotionUpdates() } @@ -447,7 +475,7 @@ class MotionKit { * Discussion: * Stops magnetometer updates. */ - @availability(iOS, introduced=5.0) + @available(iOS, introduced=5.0) func stopmagnetometerUpdates() { self.manager.stopMagnetometerUpdates() NSLog("Magnetometer Updates Status - Stopped")