About Focus Interactions for Apple TV

Panther·2021년 8월 5일
0

https://developer.apple.com/documentation/uikit/focus-based_navigation/about_focus_interactions_for_apple_tv

"Design and implement intuitive control schemes for menus and interactive user interface layouts."

메뉴와 상호작용 UI 레이아웃을 위한 직관적 컨트롤 스킴을 디자인하고 구현합니다.

Overview

iOS에서 사용자는 터치스크린과 직접적으로 상호작용합니다. 애플 TV에서 리모트 혹은 다른 입력 장치는 인터페이스를 간접적으로 제어하기 위해 사용됩니다. 포커스는 입력 장치에 의한 외부의 간접적 사용자 입력의 효과를 의미합니다. 사용자가 인터페이스를 탐색할 때, 사용자가 탐색하고 있는 방향에서 다음 초점이 맞춰지는 아이템에 초점이 맞춰집니다. 포커스 업데이트가 발생함을 의미합니다. 만약 초점이 맞춰진 아이템이 선택 가능한 것이라면, 사용자는 리모트로 이를 선택합니다. 탭바와 같은 특정 아이템들은 약간의 딜레이 후에 자동으로 선택됩니다.

UIKit 프레임워크는 포커스 기반 인터페이스만을 지원하며, 대부분의 경우에 이 동작은 자동으로 제공됩니다. 커스텀 UI 요소를 사용하는 앱의 경우 커스텀 포커스 동작을 구현해야 합니다.

Understanding the Focus Engine

UIKit 내부에서 포커스 및 포커스 움직임을 제어하는 시스템을 포커스 엔진이라고 부릅니다. 포커스 엔진은 앱에서 들어오는 포커스 움직임 이벤트를 감지합니다. 이벤트가 들어오면, 포커스 엔진은 자동으로 초점이 맞춰질 아이템을 결정하고 앱에게 알려줍니다. 이는 앱 전반에 걸쳐 일관적인 사용자 경험을 생성하고, 현재 및 미래 입력 메소드에 대한 자동 지원을 제공하며, 개발자가 앱의 고유한 움직임을 구현하는 것에 집중하도록 해줍니다. 이로써 개발자는 기본 네비게이션을 정의하거나 재발명하지 않아도 됩니다.

포커스 엔진은 포커스를 명시적으로 업데이트할 수만 있으며, 이는 초점이 맞춰진 아이템을 직접 설정하거나 포커스를 특정 방향으로 이동시키는 API는 존재하지 않음을 의미합니다. 포커스 엔진은 사용자가 이동 이벤트를 보내거나 시스템 혹은 앱이 업데이트를 요청할 때에만 포커스를 업데이트합니다. 레이아웃 디자인 생성을 할 때 포커스 동작과 관련해 아래 내용을 숙지하고 있으시길 바랍니다.

모든 아이템에서 포커스 작동이 이뤄지지는 않습니다. 초점이 맞춰지지 않는 아이템의 경우 포커스가 결정될 때마다 무시됩니다. 만약 아이템이 초점을 맞춰질 수 있도록 결정하려면 canBecomeFocused 속성을 사용하시기 바랍니다.

한 시점에 오직 하나의 아이템만 포커스를 가질 수 있습니다.

사용자는 리모트에서 방햑 선택을 통해 포커스를 변경시킬 수 있습니다. 그러면 UIKit은 해당 방향에 있는 새 UI 요소에 포커스를 이동시키길 시도합니다. 만약 시스템이 해당 방향에서 포커스를 수용할 수 있는 다른 아이템을 찾는 경우 발견된 아이템이 포커스를 갖습니다. 해당 방향에서 요소가 발견되지 않는다면, 현재 포커스가 맞춰진 아이템이 포커스 상태에 머무르게 되고, movementDidFailNotification 노티피케이션이 알려집니다.

오직 사용자만이 방향을 통해서 포커스를 변경시킬 수 있습니다. 앱에서 설정하고자 하는 방향으로 새 요소를 찾도록 프로그래밍할 수 없습니다. 포커스를 프로그래밍으로 변경시킬 수 있을지라도 포커스 변경에 대한 방법에는 제약들이 존재합니다. 포커스는 사용자 제어 하에서만 있어야 합니다. 예를 들어 테이블뷰의 컨텐츠가 변경되고, 기존 포커스 요소가 더 이상 존재하지 않는다면, 앱이 프로그래밍된 것을 토대로 새 아이템이 포커스 상태로써 선택되는 것이 합리적입니다.

포커스는 포커스 환경에 의해 관리됩니다. 포커스 환경이 포커스를 얻게 되면, 포커스를 유지하거나 해당 포커스에 자식 포커스 환경을 부여할 수 있습니다. 자식 포커스 환경이 선택하는 포커스 환경은 preferred 포커스 환경입니다. 만약 자식 포커스 퐌경이 선택되면, 자식 포커스 환경은 포커스를 유지하거나 혹은 자신이 갖는 자식 포커스 환경에 전달할 것인지를 선택할 수 있습니다. 이 과정은 포커스 자체가 수용될 때까지 아래로 뻗어 나갑니다. 윈도우의 루트 뷰 컨트롤러 또한 포커스 프로세스에 참여합니다. 루트 뷰 컨트롤러의 preferredFocusEnvironments 속성은 포커스를 얻기 위해 선택되는 첫 번째 포커스 환경입니다.

See Also


Focus Interactions

Adding User-Focusable Elements to a tvOS App

tvOS 앱을 위한 직관적이고 쉽게 조작되는 사용자 상호작용 컨트롤을 생성합니다.

https://developer.apple.com/documentation/uikit/focus-based_navigation/adding_user-focusable_elements_to_a_tvos_app
https://velog.io/@panther222128/Adding-User-Focusable-Elements-to-a-tvOS-App

UIFocusSystem

현재 초점이 맟줘진 아이템을 쿼리하거나 재평가합니다.

https://developer.apple.com/documentation/uikit/uifocussystem
https://velog.io/@panther222128/UIFocusSystem

UIFocusUpdateContext

하나의 뷰로부터 다른 뷰로의 특정 포커스 업데이트와 관련한 정보를 제공하는 객체입니다.

https://developer.apple.com/documentation/uikit/uifocusupdatecontext
https://velog.io/@panther222128/UIFocusUpdateContext

UIFocusMovementHint

초점이 맞춰진 아이템에 대한 이동 힌트 정보를 제공합니다.

https://developer.apple.com/documentation/uikit/uifocusmovementhint
https://velog.io/@panther222128/UIFocusMovementHint


0개의 댓글