orientation
This commit is contained in:
34
ios/Classes/SensorPlugin.swift
Normal file
34
ios/Classes/SensorPlugin.swift
Normal file
@@ -0,0 +1,34 @@
|
||||
import CoreMotion
|
||||
import Flutter
|
||||
import UIKit
|
||||
|
||||
@_cdecl("ux_device_orientation")
|
||||
public func ux_device_orientation() -> Int32 {
|
||||
return SensorPlugin.shared?.currentIndex ?? 0
|
||||
}
|
||||
|
||||
public class SensorPlugin: NSObject, NativePlugin {
|
||||
fileprivate static var shared: SensorPlugin?
|
||||
fileprivate var currentIndex: Int32 = 0
|
||||
|
||||
private let motion = CMMotionManager()
|
||||
|
||||
public func register(with registrar: FlutterPluginRegistrar) {
|
||||
SensorPlugin.shared = self
|
||||
guard motion.isDeviceMotionAvailable else { return }
|
||||
motion.deviceMotionUpdateInterval = 1.0 / 10.0
|
||||
motion.startDeviceMotionUpdates(to: .main) { [weak self] data, _ in
|
||||
guard let self = self, let g = data?.gravity else { return }
|
||||
if abs(g.z) > 0.8 { return }
|
||||
let next: Int32
|
||||
if abs(g.x) > abs(g.y) {
|
||||
next = g.x < 0 ? 1 : 3
|
||||
} else {
|
||||
next = g.y < 0 ? 0 : 2
|
||||
}
|
||||
if next != self.currentIndex {
|
||||
self.currentIndex = next
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user