스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
Core Motion의 새로운 기능
최신 Core Motion 업데이트를 이용하여 앱에서 모션 데이터를 사용하는 방식을 확장하는 방법을 확인하세요. 그리고 Apple Watch에서 HealthKit 운동을 기록할 때 더 높은 주파수의 센서 데이터를 스트리밍하는 방법을 알아보세요. 스노클링과 같은 수중 활동 중에 수심과 온도를 포함한 잠수 데이터를 얻는 방법을 알려드립니다. 방향, 사용자 가속도, 회전율 같은 모션 데이터 스트림을 AirPods과 같은 오디오 기기에서 받아 iPhone과 Mac 등의 연결된 기기로 보내는 방법을 알아보세요.
리소스
관련 비디오
WWDC23
WWDC20
-
다운로드
♪ ♪
안녕하세요, 저는 에린입니다 Core Motion 팀 엔지니어죠 Core Motion의 멋진 업데이트 몇 가지를 소개하게 되어 기쁩니다 Core Motion은 중심 프레임워크로 관성 센서의 동작 데이터에 액세스합니다 Apple의 하드웨어가 발전하면서 동작 정보를 얻는 능력도 발전했습니다 충돌 감지, 넘어짐 감지 공간 음향은 향상된 센서 능력을 활용한 몇 가지 기능일 뿐입니다 Core Motion으로 여러분의 앱도 향상된 기능을 활용할 수 있습니다 이번 세션에서 중점을 둘 새로운 기능은 동작 데이터와 상호작용하는 몇 가지 방법입니다 새로운 사항을 소개하기 전에 동작 데이터를 생성하는 센서를 간단히 살펴보도록 하죠 기기의 움직임을 포착하는 것이 기기 경험의 핵심입니다 많은 Apple 기기들이 내장 센서를 사용하여 공간에서 동작 개념을 생성하는 데 도움을 줍니다 Apple Watch를 예로 들어 보죠 Apple Watch의 내장 센서에는 가속도를 측정하는 가속도계 회전을 측정하는 자이로스코프 자기장을 측정하는 자기계 기압을 측정하는 기압계가 있는데요 이것들이 합쳐져 기기의 움직임과 공간 내에서 방향을 추적합니다 기기의 동작에 대한 개념을 생성하는 것이 우리가 이용하는 많은 기능의 기초가 됩니다 이런 기능에는 하루에 걸은 걸음 수 측정과 운동하면서 소모한 열량 측정 등이 있습니다 기기의 방향에 근거한 기기 경험도 지원하죠 하늘의 별을 찾아보는 별 관측 앱에서처럼요 안전을 지켜 주는 기능 즉, 차량 충돌을 감지한다든지 넘어짐을 감지하는 것도 그러한 센서를 이용한 움직임 추적에 기반한 것입니다 이것은 이용 가능한 응용 프로그램의 일부 예시이며 Core Motion의 활용법을 알아보셨으면 합니다 이제 관련 센서들을 간단히 짚어 보겠습니다 AirPods 같은 오디오 제품의 동작 데이터 받기 잠수 데이터 업데이트받기 마지막으로 새로운 고속 센서 데이터 스트리밍 방법을 살펴보죠 헤드폰 동작부터 시작하겠습니다 불과 얼마 전이었죠 동적 머리 추적을 활용한 공간 음향은 음악과 영화 감상 방법을 바꿔 놓았습니다 동적 머리 추적이 기반하는 device motion 알고리즘은 iPhone 및 Apple Watch에도 똑같이 적용됩니다 CMHeadphoneMotionManager가 몇 년 전에 도입되면서 동적 머리 추적을 가능하게 한 데이터와 동일한 것을 여러분도 사용할 수 있습니다 방향, 사용자 가속도 회전율 데이터를 iOS나 iPadOS 기기에 스트리밍해서 머리가 어떻게 움직이는지 추적할 수 있습니다 머리 추적을 이용하면 여러 멋진 기능을 넣을 수 있죠 게임 앱부터 운동 앱까지요 이제 올해부터는 CMHeadphoneMotionManager가 macOS에도 생깁니다 몇 가지 세부사항을 알아보죠 CMHeadphoneMotionManager가 처음 사용 가능했던 OS는 iOS 및 iPadOS 14이었습니다 올해부터는 macOS 14에서도 사용 가능합니다 CMHeadphoneMotionManager로 device motion 스트리밍이 가능하죠 동적 머리 추적으로 공간 음향을 지원하는 AirPods Pro 같은 기기부터 연결된 iOS, iPadOS 혹은 macOS 기기에 이르기까지요 CMDeviceMotion을 통해 지원되는 기기에서 스트리밍하는 방향, 사용자 가속도 회전율 데이터를 확인하세요 iPhone과 Apple Watch에서 하는 것처럼요 CMHeadphoneMotionManager에만 해당하는 추가 정보 SensorLocation은 데이터의 출처가 왼쪽인지 오른쪽인지 분명하게 알려줍니다 데이터는 떨어져 있는 기기에서 스트리밍되기 때문에 언제 접속되는지 반드시 알아야 합니다 CMHeadphoneMotionManagerDelegate 프로토콜은 연결 상태 업데이트 확인을 쉽게 해 주죠 이제 사용법을 알려드리겠습니다
CMHeadphoneMotionManagerDelegate 프로토콜을 채택하여 연결 상태 업데이트에 응답하게 합니다 오디오 기기가 iPhone, iPad, Mac 등 데이터 스트리밍 기기와 접속되면 데이터는 사용 가능하죠 자동 귀 감지가 실행되고 있다면 머리 추적에 영향을 주는 이벤트를 받게 됩니다 귀에서 분리되면 분리 이벤트를 받게 되겠죠 다시 귀에 꽂으면 연결 이벤트를 받게 되고요
이와 유사하게 자동 머리 감지가 실행되면 오버이어 헤드폰을 쓰고 벗을 때 이런 이벤트가 나올 겁니다 CMHeadphoneMotionManager를 설정해서 이런 이벤트를 확인하고 데이터를 스트리밍하게 하는 건 쉽죠, 보여드릴게요 데이터 스트리밍을 시작하기 전에 확인해야 할 것은 device motion 데이터의 사용 가능 여부입니다 이것은 isDeviceMotionAvailable 프로퍼티를 쓰면 확인할 수 있죠 앞서 얘기한 연결 이벤트를 수신할 위임자를 지정합니다 그런 다음 데이터 스트리밍을 시작합니다 CMHeadphoneMotionManager는 푸시, 풀 인터페이스 둘 다 씁니다 이 예시에서는 푸시 인터페이스를 사용하겠습니다 startDeviceMotionUpdates를 쓰고 오퍼레이션 큐를 핸들러로 지정하죠 동작 데이터에 액세스하기 때문에 인증이 중요합니다 사용자들에게 앱이 동작 데이터를 사용하도록 인증할지를 묻죠 Info.plist에 추가하는 Motion Usage Description 키를 사용해서요 authorizationStatus 프로퍼티를 확인하면 동작 데이터에 대한 인증을 받았는지 확인하고 허용 레벨에 상관없이 끊김이 없는 경험을 제공하게 되죠 인증받고 데이터 스트리밍을 시작하면 머리 자세 추적은 쉽습니다 각 기기의 동작 업데이트가 제공한 방향 정보를 사용하니까요 예를 들면 startingPose로 기준 방향을 계속 추적할 수 있고 multiply 메서드를 사용하면 손쉽게 현재 샘플의 최초 방향에 대한 상대적 변화를 얻을 수 있습니다 방향, 사용자 가속도 회전율 데이터와 함께 각 기기의 동작 업데이트에는 센서 위치 정보가 포함돼 있죠 이것은 중요합니다, 동작 데이터는 한쪽 이어폰씩 받기 때문이죠 각 샘플에서 받은 SensorLocation enum은 어느 쪽 이어폰의 데이터인지 알려줍니다 데이터를 스트리밍하는 이어폰에 영향을 미치는 것은 여러 가지인데 자동 귀 감지 기능이 켜져 있다면 삽입 상태도 여기에 포함됩니다 예를 들면 오른쪽 이어폰에서 데이터가 스트리밍되고 있지만 자동 귀 감지 기능이 켜진 상태로 귀에서 빼면 왼쪽 이어폰이 데이터 스트리밍을 떠맡게 됩니다 이로써 보다 매끄러운 머리 추적 경험이 가능하죠 편리한 머리 추적 기능 덕분에 다양한 경험이 가능해졌습니다 팔굽혀펴기 개수를 세거나 자세를 모니터링하는 것이 어느 때보다 쉬워졌죠 이제 macOS도 지원하게 되어 머리 추적이 가능한 오디오 제품은 물론 더 다양한 기기에 이르기까지 동작 데이터를 스트리밍할 수 있습니다 CMHeadphoneMotionManager로 여러분이 무엇을 만들지 기대됩니다 머리 움직임을 추적하기 위해 기압을 측정할 필요는 없습니다 하지만 어떤 작업에선 필요합니다 이제 수중 활동과 상호작용하는 법을 알아보죠 CMWaterSubmersionManager의 몇 가지 멋진 업데이트를 써서요 스노클링이나 수영 같은 수중 활동을 할 때는 물과 잠수 상태에 대해서 알아두면 재미있는 것이 많습니다 얼마나 깊이 잠수했고 수온이 얼마인지 궁금할 수도 있습니다 다음과 같은 것들도 알면 유용하죠 언제 잠수했는지 물 밖을 나가 해변이나 배로 다시 올라갔는지 활동 중의 표면 기압이 얼마나 되는지요 CMWaterSubmersionManager는 내장 기압계를 사용하여 수중 활동을 하는 동안 이런 측정값을 추적할 수 있습니다 좀 더 자세히 알아보겠습니다 CMWaterSubmersionManager는 watchOS 9을 쓰는 Apple Watch Ultra에서 사용 가능합니다 CMWaterSubmersionManagerDelegate는 깊이, 온도 잠수 상태 데이터를 확인합니다 여러분의 앱에 Shallow Depth and Pressure 기능을 추가해서 끊김이 없는 경험을 얻게 하세요 앱 사용자가 수중 활동을 시작할 때 자동 실행 설정을 구축하도록 해서요 CMWaterSubmersionManager를 사용하는 방법을 알려드리겠습니다 잠수 상태 추적을 시작하려면 사용 가능한지 확인한 후 CMWaterSubmersionManager를 설정하세요 그런 다음 위임자를 지정해서 잠수 상태 업데이트와 이벤트를 받죠 그런 업데이트를 받는 방법에 대해 간단히 얘기해 보겠습니다 CMWaterSubmersionManagerDelegate를 사용해서 업데이트를 받죠 여러분이 받을 수 있는 업데이트 유형은 아주 다양합니다 물에 들어가고 나올 때 등 잠수 상태에 대한 업데이트는 CMWaterSubmersionEvent와 함께 didUpdate 메서드를 써서 산출되죠 문제가 있으면 errorOccurred 업데이트를 받고요 앱이 권한을 상실하거나 지원되지 않는 플랫폼에서 업데이트를 받으려 할 때 말이죠 CMWaterTemperature를 사용하면 수온 업데이트를 받을 수 있는데 이것은 불확실한 값입니다 Apple Watch의 온도가 수온과 같아지는 데 시간이 걸리니까요 그래서 처음 잠수하면 불확실성이 더 높아지고 물속에서 좀 더 시간을 보내면 정확한 값으로 수렴하겠죠 수온 업데이트는 잠수했을 때만 받을 수 있다는 걸 잊지 마세요 수심, 수압, 표면 기압 잠수 상태에 대한 업데이트는 CMWaterSubmersionMeasurement로 받게 됩니다 잠수 활동을 하는 동안 일정한 시간 간격을 두고 앱으로 전달되죠 이런 데이터에서 수심 같은 것은 잠수 상태에서만 이용 가능하므로 이런 것들은 선택 사항입니다 수심은 특정 상황에만 대응합니다 어떻게 매핑되는지 보여드리죠
물 밖에 있는 상태부터 시작하죠 notSubmerged 상태입니다 1m 이하의 수심이라면 submergedShallow 상태입니다 1m 이상 깊은 곳에 있다면 submergedDeep 상태죠 Shallow Depth and Pressure 기능으로 손쉽게 앱 사용자에게 감압증의 위험이 없는 깊이에 머물도록 할 수 있습니다 최대 수심 6m를 유지하며 6m에 가까워지면 알려줍니다 최대 깊이에 대한 프로퍼티를 쓰면 수심을 확인할 수 있죠 수심 6m에 가까워지면 approachingMaxDepth 상태가 되죠 6m 이상 깊어지면 pastMaxDepth 상태가 됩니다 6m까지는 데이터가 제공되고 pastMaxDepth 상태에선 불확실해지죠 그보다 더 깊이 들어가면 sensorDepthError 상태가 됩니다 CMWaterSubmersionManager는 수심을 구역별로 나누고 안전과 센서 한계에 초점을 맞춰 수심 변화를 쉽게 확인하게 합니다 수심 6m 이상인 경우에 관심이 있다면 관리되는 권한에 대한 자세한 내용은 문서를 참조하세요 어느 쪽을 선택하든 멋진 수중 스포츠 경험 창출은 CMWaterSubmersionManager 덕분에 어느 때보다 쉬워졌습니다 물 밖에서 하는 스포츠도 많죠 이런 활동을 하는 중에 CMBatchedSensorManager를 써서 고속 동작 데이터를 사용하는 방법을 알려드리고자 합니다 먼저 몇 가지 배경부터 설명하죠 지금까지 동작 데이터가 전달되는 몇 가지 방식을 말씀드렸습니다 device motion 알고리즘은 가속도계와 자이로스코프 데이터를 합쳐 Apple Watch 같은 기기가 공간에서 움직이는 방식을 추적하는 쉬운 방법을 제공합니다 여러분에게 친숙한 CMMotionManager는 이런 샘플을 샘플 단위로 앱에 실시간으로 전해 줍니다 최대 지원 주파수는 100Hz입니다 저지연 요건이 있는 경우라면 최고의 선택이라는 뜻입니다 기기의 순간적인 위치에 기반하는 UI 요소가 그러한 예죠 이것을 새로운 CMBatchedSensorManager를 써서 고속 데이터를 전달하는 방식과 비교해 보겠습니다 CMBatchedSensorManager는 고정된 시간 간격으로 데이터를 제공하죠 매초 데이터를 전송합니다 따라서 더 빠른 고속 데이터를 더 낮은 오버헤드로 보낼 수 있죠 가속도계는 800Hz device motion은 200Hz입니다 반면 기존의 CMMotionManager는 100Hz까지만 지원하죠 이제 여러분도 넘어짐 감지나 충돌 감지 같은 안전 기능에 쓰이는 것과 같은 데이터 스트림에 액세스할 수 있습니다
데이터가 일괄 처리 되기 때문에 고려해야 할 것들이 있죠 CMBatchedSensorManager를 사용하려고 할 때요 앱에 있는 운동 중심 기능이 고속 데이터를 활용하면서도 지연 요건이 그리 엄격하지 않다면 CMBatchedSensorManager가 가장 적합합니다 고속 센서 데이터가 어떻게 전송되는지 기존 인터페이스로 제공되는 것과 무엇이 다른지 알아봤습니다 이것을 사용할 수 있는 예를 보여드리겠습니다 짧은 순간에 충격을 가하는 행위가 중심이 되는 스포츠는 많습니다 골프, 테니스, 야구 같은 것을 예로 들 수 있겠죠 이런 종목들은 스윙하는 동안 더 많은 정보를 수집하는 것이 폼을 평가하고 성적을 올리는 데 필수적일 것입니다 바로 여기서 고속 센서 데이터 수집이 중요하죠 구체적인 예를 들어 보면 더 명확해질 겁니다 야구의 스윙 동작에 초점을 맞춰 보죠
스윙에는 몇 가지 단계가 있습니다 그림을 보시면 스윙 전 준비 스윙, 타격 후 폴로스루로 나눠지죠 스윙의 질을 결정하는 데는 접촉 소요 시간이 중요합니다 여기서 접촉 소요 시간이란 타자가 스윙을 시작해서 배트가 공을 맞힐 때까지 걸리는 시간입니다 고속 센서 데이터를 쓰면 이것을 세 단계로 나눌 수 있죠 타자의 손목에는 Apple Watch가 있습니다 x축, y축, z축 방향으로요 파란 선은 타자의 주위에서 움직이는 손목의 궤적입니다 아래 방향의 중력 벡터도 보입니다 접촉 소요 시간을 계산하기 위해서 먼저 배트와 공이 만나는 타격 지점을 찾아냅니다 800Hz 가속도계 데이터로요 그런 다음 중력 방향 회전으로 스윙 시작점을 파악하죠 200Hz device motion 데이터로요 이제 스윙 시작부터 타격까지의 타임스탬프 차이를 계산할 수 있고 이것이 접촉 소요 시간입니다 스윙 중의 센서 데이터를 시각화해 보겠습니다 우리가 찾으려는 것이 무엇인지 알 수 있게요 이것은 가속도계의 z축 방향 데이터 그래프입니다 스윙을 한 번 한 1초간을 표시한 거죠 0.5초에서 0.6초 사이에서 움직임이 폭발적으로 일어납니다 타격 지점을 찾는 우리의 알고리즘은 이것을 중심으로 합니다 스윙 중에 이용 가능한 신호 정보의 양을 비교해 보죠 위쪽은 800Hz 가속도계이고 아래쪽은 100Hz 가속도계입니다 우리가 주목하는 0.5초와 0.6초 사이에서 데이터 포인트가 10개에서 80개로 늘었습니다 그래서 상황을 훨씬 자세하게 보여줄 수 있습니다 이런 식으로 타격 같은 행위를 집중적으로 살펴볼 수 있습니다 이제 동일한 스윙을 device motion의 관점에서 보죠 이 그래프는 200Hz 중력 방향 회전율을 나타낸 것입니다 회전율이 바뀌는 지점에서 스윙이 시작된다는 걸 알 수 있죠 약 0.3초 언저리에서요 이것들을 합쳐 보죠 시간순으로 나타낸 그래프에서 800Hz 가속도계와 200Hz device motion이 접촉 소요 시간을 계산하는 데 어떻게 도움이 될지 알 수 있죠 센서 스트림이 스윙을 어떻게 나타내는지 알게 됐습니다 CMBatchedSensorManager를 쓰면 데이터를 스트리밍하고 처리할 수 있죠
먼저 이 플랫폼에서 해당 데이터를 이용할 수 있는지 확인해야 합니다 isAccelerometerSupported를 통해 확인할 수 있습니다 같은 프로퍼티를 쓰면 device motion 지원을 확인할 수 있죠 Apple Watch Series 8과 Ultra는 모두 고속 가속도계와 device motion을 지원합니다
이것은 운동 중심 API라서 데이터를 얻으려면 작동 중인 HealthKit Workout 세션이 필요하죠 HealthKit Workout 세션에 있다면 업데이트를 받을 수 있습니다 Swift async support가 있어서 센서 데이터를 일괄로 받고 처리하는 것은 쉽습니다 루프를 나가는 조건을 반드시 확인해 줘야 합니다 예를 들면 운동이 끝났는지를 확인한다든지요
에러가 나타나는 경우는 동작 데이터에 대한 권한이 없거나 지원되지 않는 플랫폼일 때입니다 각각의 배치 데이터로 하고 싶은 일에 집중해 보죠 각각의 배치 데이터에 feed 함수를 호출해 제 알고리즘을 실행합니다 배트가 공과 접촉하면 z축 방향에서 뚜렷한 반응이 나타나리라 생각합니다 기억하세요, z축은 Crown의 수직 방향입니다 이런 떨림은 임팩트를 추정하기에 좋죠 이것을 염두에 두고 가속도계 배치 데이터를 처리하겠습니다 먼저 높은 주파수가 나오는 부분을 분리해야겠죠 접촉할 때 힘의 전달을 나타내는 것이니까요 이를 위해 z축 샘플을 필터링한 것을 fz로 놓습니다 필터링된 데이터를 사용하여 임팩트 순간을 추정할 것입니다 필터링된 신호가 피크를 이룰 때요 그런 샘플과 관련된 인덱스를 impactIndex로 계속 추적합니다 필터링된 신호에서 얻은 impactIndex를 써서 원본 배치 데이터에서 임팩트 타임스탬프를 얻을 수 있죠 이렇게 해서 접촉 소요 시간을 계산하는 2단계로 넘어가게 됩니다 중력 방향 회전을 이용해 스윙 시작점을 감지하면서요
타자가 스윙할 때 Apple Watch의 궤적을 상상해 보세요 몸통 주변을 돌다가 공과 만날 것입니다 스윙하는 동안에는 중력 방향 회전율이 0이 아닐 거고 스윙하지 않을 때는 중력 방향 회전율이 0에 가깝겠죠 로컬 버퍼에 높은 주파수의 device motion을 스트리밍하면서 회전율 데이터를 스윙의 시작점을 파악하는 데 쓸 수 있습니다 제 compute 함수가 어떤지 자세히 살펴보죠 제 로컬 버퍼를 역방향으로 반복 처리 해서 관심 지점을 알아냅니다 임팩트 타임스탬프를요 스윙 시작점은 임팩트보다 앞서 위치하기 때문에 shouldProcess 체크를 계속 실행할 수 있죠 버퍼의 각 샘플을 처리하기 전에요 여기에는 타임스탬프 확인이 포함될 수도 있는데 device motion 샘플을 확인하며 위치는 임팩트 시간 전입니다 스윙 시간에 제한을 걸 수도 있죠 스윙 시작점이 공과 접촉하기 전 어떤 시간 범위 내에 있어야 합니다
일련의 초기 확인을 통과한 샘플에 대해서는 computeRotation 함수에서 중력 방향 회전을 계산합니다 각 축의 회전율과 중력값을 곱해서 더하는 거죠 중력 방향 회전을 계산함으로써 스윙 시작점을 찾을 수 있습니다 스윙 시작점을 확인하려면 중력 방향 회전이 지속적으로 임계치에 이르지 못할 때를 확인합니다 중력 방향 회전율이 임계치에 이르지 못하는 것이 보이면 그것을 스윙 시작점으로 정하고 루프를 나옵니다 최종 확인은 감지한 스윙을 검증하는 것입니다 여기서 스윙 중에 누적된 중력 방향 회전율을 알 수 있는데 그것이 예상 임계치 안에 있는지 확인합니다 이렇게 하면 제가 감지한 시작 타임스탬프를 반환할 수 있죠 이로써 마지막 단계로 넘어갑니다 3단계까지 오면 접촉 소요 시간 계산에 필요한 것을 다 갖게 되죠 최초 feed 함수로 다시 돌아가 보죠
CMBatchedSensorManager를 사용해서 가속도계와 device motion 데이터를 스트리밍합니다 impactTime을 감지할 때는 필터링된 z축 방향 가속도계 데이터를 사용합니다 그런 다음 임팩트 타임스탬프 부근의 스윙 시작점을 알아냅니다 중력 방향 회전율을 확인해서요 두 타임스탬프 간의 차를 구하면 접촉 소요 시간이 계산됩니다 센서 데이터 기반 기능을 개발하는 방법에 대한 간단한 예시였습니다 고주파 데이터 스트림의 추가 신호 정보는 많은 다른 연구에도 길을 열어 줍니다 함께 살펴보죠 앞서 이러한 가속도계 데이터의 자취를 살펴봤죠 z축 방향의 800Hz 가속도계 스트림에서요 이제 두 번째 그래프를 살펴보죠 매우 비슷해 보이지만 꽤 다릅니다 이것은 헛스윙했을 때의 자취입니다 방망이가 공과 접촉하지 못한 거죠 스윙 동작 자체는 둘 다 유사합니다만 고속 데이터 스트림이 어떻게 이런 차이를 구별하게 하는지 알 수 있습니다 여러분이 개발한 알고리즘은 이런 차이를 이용하여 이전에는 불가능했던 것을 감지합니다 요약하면 동일한 device motion 알고리즘이 두 가지 다른 방식으로 데이터를 제공합니다 CMMotionManager는 데이터를 샘플당 최대 100Hz로 보내죠 1초 미만의 시간 동안 저지연 요건이 있거나 운동 외 동작 기반 기능인 경우 이 방식을 사용하는 것이 좋습니다 새로운 CMBatchedSensorManager는 고속으로 데이터를 전송합니다 device motion은 최대 200Hz 가속도계는 최대 800Hz죠 일괄 처리 스케줄에 따라 배치 데이터를 매초 보내므로 고속 데이터 처리가 필요한 운동 중심 기능에 유용합니다 Apple Watch Series 8과 Ultra에서 사용할 수 있습니다 저는 CMBatchedSensorManager를 야구 스윙에 중점을 두고 썼지만 이런 고속 데이터 스트림은 모든 운동에서 Apple Watch의 움직임에 대한 가치 있는 정보를 제공하죠 특히 시간 간격이 짧거나 충격 기반 활동인 경우에요 이것이 바로 CMBatchedSensorManager입니다 이것으로 Core Motion의 새로운 기능 리뷰를 마칩니다 동작과 상호작용하는 훌륭한 방법이 있습니다 헤드폰을 사용하든 Apple Watch를 사용하든요 동작 데이터를 사용하는 멋진 방법은 아주 많습니다 저는 그중 몇 개만 소개했을 뿐이죠 여러분도 한번 시도해 보시고 더 자세한 정보는 관련 문서를 확인해 주세요 저희에게 피드백도 주시고요 움직임 측정과 같이 동작 데이터가 건강 기반 기능으로 전환되는 방법의 예는 WWDC 2020 '걸음 수 계산 그 이상의 것' 세션에서 보실 수 있습니다 CMBatchedSensorManager를 이용한 달리기 운동에 대한 더 자세한 정보는 'WorkoutKit으로 맞춤형 운동 찾기' 세션에 나옵니다 동작 데이터로 놀라운 경험을 만들어 보시길 바랍니다 시청해 주셔서 감사합니다
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.