๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป๊ฐœ๋ฐœ

[Swift] iOS ๊ธฐ๊ธฐ์˜ ์ž์ด๋กœ์„ผ์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•

by ๋ˆˆ๋ˆ„ :) 2023. 3. 21.

 

 

 

 

์ž์ด๋กœ ์„ผ์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด์„ , 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 ์ถ•์˜ ํšŒ์ „ ์†๋„ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž์ด๋กœ ์„ผ์„œ์˜ ๊ฐ’์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

 

๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ’ป