[번역] UIControl (애플 공식 문서)

삭제된 Velog·2025년 1월 28일

UIKit

목록 보기
20/21
post-thumbnail

본 글은 UIControl (애플 공식 문서)를 한국어로 번역하여 옮긴 글입니다.

사용자 상호작용에 대한 응답으로 특정 목적이나 액션을 전달하는 시각적 요소인 컨트롤을 위한 베이스 클래스

iOS 2.0+ | iPadOS 2.0+ | Mac Catalyst 13.1+ | tvOS | visionOS 1.0+

@MainActor
class UIControl

Mentioned in

Overview

컨트롤은 버튼이나 슬라이더와 같은 요소로, 앱에서 네비게이션을 용이하게 하거나 사용자 입력을 모으며 컨텐츠를 조작하는 데 사용할 수 있습니다. 컨트롤은 타겟-액션(target-action) 메커니즘을 사용하여 상호자 상호작용을 앱에 전달합니다.

이 클래스의 인스턴스를 직접 생성하지 마세요. UIControl 클래스는 사용자화 컨트롤을 구현하기 위한 기능을 재정의할 수 있도록 의도적으로 설계된 클래스(subclassing point)입니다. 또한, 동작을 수정하거나 확장하기 위해 기존 컨트롤 클래스를 상속할 수 있습니다. 예를 들어, 터치 이벤트를 직접 추적하거나, 컨트롤의 상태 변화를 측정하기 위해 이 클래스의 메서드를 재정의할 수 있습니다.

컨트롤의 상태는 컨트롤의 외형과 사용자 상호작용을 지원할 수 있는 능력을 결정합니다. 컨트롤은 UIControl.State에 정의된 여러 상태 중 하나가 될 수 있습니다. 앱의 필요에 따라 프로그래밍 방식으로 컨트롤의 상태를 변경할 수 있습니다. 예를 들어, 사용자가 컨트롤과 상호작용하지 못하도록 해당 컨트롤을 비활성화할 수 있습니다. 또한, 사용자 상호작용으로 인해 컨트롤의 상태가 변경될 수 있습니다.

Respond to user interaction

타겟-액션 메커니즘은 앱에서 컨트롤을 사용하기 위해 작성하는 코드를 단순하게 합니다. 터치 이벤트를 추적하는 코드를 작성하는 대신, 특정 컨트롤 이벤트에 응답하는 액션 메서드를 작성하세요. 예를 들어, 슬라이더 값의 변화에 반응하는 액션 메서드를 구현할 수 있습니다. 컨트롤은 들어오는 터치 이벤트를 추적하고, 액션 메서드를 호출할 시점을 결정하는 모든 작업을 처리합니다.

컨트롤에 액션 메서드를 추가할 때, addTarget(_:action:for:) 메서드에 액션 메서드와 해당 메서드가 정의된 객체 모두 명시해야 합니다. (또한, 인터페이스 빌더에서 타겟과 컨트롤의 액션 메서드를 구성할 수 있습니다.) 타겟 객체는 어느 객체가 되어도 무방하지만, 일반적으로 컨트롤을 포함한 뷰 컨트롤러의 최상위 뷰가 됩니다. 타겟 객체를 nil로 지정하면, 컨트롤은 응답자 체인(responder chain)을 따라 지정된 액션 메서드가 정의되어 있는 객체를 검색합니다.

액션 메서드의 시그니처(signature)는 세 가지 형태 중 하나를 취합니다. sender 매개변수는 액션 메서드를 호출하는 컨트롤에 해당하며, event 매개변수는 컨트롤 관련 이벤트를 작동한 UIEvent 객체에 해당합니다.

@IBAction func doSomething()
@IBAction func doSomething(sender: UIButton)
@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)
- (IBAction)doSomething;
- (IBAction)doSomething:(id)sender;
- (IBAction)doSomething:(id)sender forEvent:(UIEvent*)event;

시스템은 사용자가 특정 방식으로 컨트롤과 상호작용을 할 때 액션 메서드를 호출합니다. UIControl.Event 타입은 컨트롤이 전달할 수 있는 사용자 상호작용의 유형을 정의하며, 이러한 상호작용은 대부분 컨트롤 내에서 발생하는 특정 터치 이벤트와 연관이 있습니다. 컨트롤을 구성할 때, 어떤 이벤트가 액션 메서드를 호출할지 지정해야 합니다. 버튼 컨트롤의 경우, touchDown이나 touchUpInside 이벤트를 사용하여 액션 메서드를 호출할 수 있습니다. 슬라이더의 경우, 슬라이더 값의 변화에만 관심이 있다면, 액션 메서드를 valueChanged 이벤트에 연결되도록 선택해야 합니다.

특정 컨트롤 이벤트가 발생하면, 컨트롤은 즉시 연관된 액션 메서드를 호출합니다. 현재 UIApplication 객체는 액션 메서드를 디스패치(dispatch)하고, 필요하다면 응답자 체인을 따라 메시지를 처리할 적절한 객체를 찾습니다. 응답자(responder)와 응답자 체인에 대한 자세한 정보는 Event Handling Guide for UIKit Apps를 참조하세요.

Configure control attributes in Interface Builder

아래 테이블은 UIControl 클래스 인스턴스의 속성을 보여줍니다.

Attribute
Description
Alignment컨트롤 컨텐츠의 수직과 수평 정렬을 설정합니다. 버튼이나 텍스트 필드처럼 텍스트나 이미지를 포함하는 컨트롤의 경우, 해당 속성을 사용하여 컨트롤의 바운즈(bounds) 내에서 컨텐츠의 위치를 구성할 수 있습니다.

이 정렬 옵션은 컨트롤 자체가 아닌 컨트롤의 컨텐츠에 적용됩니다. 다른 컨트롤이나 뷰에 대해서 컨트롤을 정렬하는 방법에 대한 자세한 정보는 Auto Layout Guide를 참조하세요.
Content컨트롤의 초기 상태를 설정합니다. 체크박스를 사용하여 컨트롤이 초기 상태에서 활성(enabled), 선택(selected), 아니면 하이라이트(highlight) 상태인지 구성할 수 있습니다.

Support localization

UIControl은 추상 클래스(abstract class)이기 때문에 이를 국제화(internationalize)하지 않습니다. 그러나, UIButton과 같은 하위 클래스의 컨텐츠는 국제화할 수 있습니다. 특정 컨트롤의 국제화에 대한 자세한 정보는 해당 컨트롤의 문서를 참조하세요.

Make controls accessible

컨트롤은 기본적으로 손쉬운 사용(accessible)을 지원합니다. 유용하게 사용하려면, 손쉬운 사용이 가능한 사용자 인터페이스 요소는 요소 위치, 이름, 동작, 값, 유형과 같은 명확하고 유용한 정보를 반드시 제공해야 합니다. 이는 보이스오버가 사용자에게 전달하는 정보가 됩니다. 맹인이거나 저시력자인 사용자는 기기를 사용하는 데 도움을 받기 위해 보이스오버를 활용할 수 있습니다.

컨트롤은 아래 손쉬운 사용 속성을 지원합니다.

  • Label. 컨트롤이나 뷰를 간단하게 설명하는 짧은 현지화된 단어나 문구이며, 요소의 유형은 식별하지 마세요. 예로 추가재생이 있습니다.

  • Trait. 요소의 상태, 동작이나 사용 방식의 한 측면을 설명하는 하나 이상의 특성(trait)의 조합입니다. 예를 들어, 키보드 키처럼 동작하고 선택된 상태에 있는 요소를 설명하기 위해 키보드 키와 선택(selected)이라는 특성을 조합할 수 있습니다.

  • Hint. 요소에 대한 액션 결과를 설명하는 간결하고 현지화된 문구입니다. 예로 제목 추가하기장바구니 열기가 있습니다.

  • Frame. 화면 좌표계에서 요소의 프레임을 나타내며, 이는 요소의 화면 위치나 크기를 정의하는 CGRect 구조체입니다.

  • Value. 레이블(label)이 값을 나타내지 않을 때 요소의 현재 값을 의미합니다. 예를 들어, 슬라이더의 레이블은 Speed이나, 현재 값은 50%일 수 있습니다.

UIControl 클래스는 값과 프레임 속성에 대한 기본적인 컨텐츠를 제공합니다. 많은 컨트롤이 추가적인 특정 특성을 자동으로 활성화합니다. 다른 손쉬운 사용 속성은 프로그래밍 방식으로나 인터페이스 빌더의 아이덴티티 인스펙터(identity inspector)에서 구성할 수 있습니다.

손쉬운 사용 속성에 대한 자세한 정보는 Accessibility Programming Guide for iOS를 참조하세요.

Subclassing notes

UIControl을 서브클래싱하면 내장된 타겟-액션 메커니즘에 접근할 수 있으며, 이벤트 처리 지원을 간소화할 수 있습니다. 기존 컨트롤을 서브클래싱하여 두 가지 방법 중 하나로 동작을 수정할 수 있습니다.

  • 컨트롤과 연관된 타겟으로의 액션 메서드 디스패치를 수정하거나 관찰하려면, 기존 하위 클래스에서 sendAction(_:to:for:) 메서드를 재정의하세요. 특정 객체, 셀렉터(selector)나 이벤트에 대한 디스패치 동작을 수정하고자 이 메서드를 사용할 수 있습니다.

  • 컨트롤에서 발생하는 터치 이벤트를 추적하려면 beginTracking(_:with:), continueTracking(_:with:), endTracking(_:with:)cancelTracking(_:with:) 메서드를 재정의하세요. 이 추적 정보를 활용하여 추가적인 액션을 수행할 수 있습니다. 터치 이벤트를 추적할 때는 항상 UIResponder 클래스에 정의된 메서드 대신 이러한 메서드들을 사용하세요.

UIControl을 직접 서브클래싱하는 경우, 해당 하위 클래스는 컨트롤의 시각적 표현을 설정하고 관리할 책임이 있습니다. 이벤트를 추적하는 메서드를 사용하여 컨트롤의 상태를 업데이트하고, 컨트롤의 값이 변경될 때 액션을 전송하세요.

profile
rlarjsdn3.github.io

0개의 댓글