์์ด๋ก ์ผ์ ๊ฐ์ ์ฝ์ด์ค๊ธฐ ์ํด์ , Core Motion ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ค์์ Core Motion ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ์ฌ ์์ด๋ก ์ผ์ ๊ฐ์ ์ฝ์ด์ค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
import CoreMotion
// CMMotionManager ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
let motionManager = CMMotionManager()
// ๋๋ฐ์ด์ค์์ ์์ด๋ก์ค์ฝํ๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์ฒดํฌํฉ๋๋ค.
if motionManager.isGyroAvailable {
// ์์ด๋ก์ค์ฝํ ์ผ์ ๊ฐ์ง ๊ฐ๊ฒฉ์ ์ค์ ํฉ๋๋ค.
motionManager.gyroUpdateInterval = 0.1
// ์์ด๋ก์ค์ฝํ ๊ฐ ์
๋ฐ์ดํธ๋ฅผ ์์ํฉ๋๋ค.
motionManager.startGyroUpdates(to: OperationQueue.current!) { (gyroData, error) in
// ์์ด๋ก์ค์ฝํ ๋ฐ์ดํฐ
if let rotationRate = gyroData?.rotationRate {
let x = rotationRate.x
let y = rotationRate.y
let z = rotationRate.z
print("Gyroscope Data: x=\(x), y=\(y), z=\(z)")
}
}
} else {
print("Gyroscope is not available")
}
์ ์ฝ๋์์, CMMotionManager ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ,
isGyroAvailable ์์ฑ์ ์ฌ์ฉํ์ฌ ์ฅ์น๊ฐ ์์ด๋ก ์ผ์๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
gyroUpdateInterval ์์ฑ์ ์ฌ์ฉํ์ฌ ์์ด๋ก ์ผ์ ๊ฐ์ ์ ๋ฐ์ดํธํ ์๊ฐ ๊ฐ๊ฒฉ์ ์ค์ ํ๊ณ ,
startGyroUpdates(to:withHandler:) ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ด๋ก ์ผ์ ๊ฐ์ ์ฝ์ด๋ค์ ๋๋ค.
startGyroUpdates(to:withHandler:) ๋ฉ์๋๋ CMGyroData ๊ฐ์ฒด์ ์๋ฌ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
CMGyroData ๊ฐ์ฒด์์ rotationRate ์์ฑ์ ์ฌ์ฉํ์ฌ x, y, z ์ถ์ ํ์ ์๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ ์ฝ๋์์๋ ๊ฐ๋จํ๊ฒ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ์์ผ๋ก ์์ด๋ก ์ผ์์ ๊ฐ์ ํ์ธํ์์ต๋๋ค.
๊ฐ๋ฐํ๋๋ฐ ๋์์ด ๋์ จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค ๐ป