Skip to content

Instantly share code, notes, and snippets.

@emin-grbo
Created July 27, 2022 10:10
Show Gist options
  • Save emin-grbo/2710d39fbc8758784bb1eb80344603f8 to your computer and use it in GitHub Desktop.
Save emin-grbo/2710d39fbc8758784bb1eb80344603f8 to your computer and use it in GitHub Desktop.
CMMotionManager
import SwiftUI
import CoreMotion
struct CMMotionManagerTest: View {
@StateObject var motion = MotionManager()
var body: some View {
ZStack {
Color.purple
Image(systemName: "safari.fill")
.resizable()
.foregroundColor(Color.pink)
.frame(width: 50, height: 50)
.rotationEffect(-Angle(degrees: motion.fx*100), anchor: .center)
}
.edgesIgnoringSafeArea(.all)
}
}
struct CMMotionManagerTest_Previews: PreviewProvider {
static var previews: some View {
CMMotionManagerTest()
}
}
class MotionManager: ObservableObject {
private let motionManager = CMMotionManager()
var fx: CGFloat = 0
var fy: CGFloat = 0
var fz: CGFloat = 0
var dx: Double = 0
var dy: Double = 0
var dz: Double = 0
@Published var isAnimating = false
init() {
motionManager.startDeviceMotionUpdates(to: .main) { data, error in
guard let newData = data?.gravity else { return }
self.dx = newData.x
self.dy = newData.y
self.dz = newData.z
self.fx = CGFloat((newData.x))
self.fy = CGFloat((newData.y))
self.fz = CGFloat((newData.z))
print("""
X: \(String(format: "%.2f", self.fx)),
Y: \(String(format: "%.2f", self.fy)),
Z: \(String(format: "%.2f", self.fz)),
""")
self.isAnimating.toggle()
self.objectWillChange.send()
}
}
// Used to stop motion manager if needed.
func shutdown() {
motionManager.stopDeviceMotionUpdates()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment