UIResponder 알아보기

기본 개념


리스폰더 객체(UIResponder의 인스턴스)는 UIKit 앱 이벤트 처리의 백본을 구성합니다.

UIApplication, UIViewController, UIView와 같은 객체들은 리스폰더에 포함됩니다.

이벤트가 발생하면 UIKit은 앱의 리스폰더 객체에게 이벤트를 전달합니다.

결국 UIApplication, UIViewController, UIView 객체는 이벤트를 처리할 수 있다는 것을 의미합니다.

백본을 구성한다는 것은 UIResponder가 리스폰더 객체들을 묶어서 하나의 역할을 한다고 이해하시면 됩니다.

이벤트의 처리


터치, 모션, 프레스, 원격제어 등의 다양한 이벤트를 모두 포함합니다.

각 이벤트를 처리하기 위해서 리스폰더는 해당 메소드를 override해야 합니다.

e.g.) touchesBegan(_ :with:), touchesCancelled(_ :with:) 등

처리되지 않은 이벤트


UIKit 리스폰더는 처리되지 않은 이벤트를 앱의 다른 부분으로 전달하는 작업도 관리합니다.

리스폰더가 이벤트를 처리하지 않으면 리스폰더 체인의 다음 객체로 해당 이벤트를 전달합니다.

UIKit은 어떤 리스폰더 객체가 이벤트를 처리할지 리스폰더 체인을 동적으로 관리합니다.


Responder Chain

리스폰더 객체는 이벤트를 전달받으면 이벤트를 처리를 시도합니다.

처리할 수 없는 경우 && 최상위 리스폰더 객체가 아닌 경우 상위 리스폰더 객체로 이벤트를 전달합니다.

window객체 까지 이벤트가 전달됐는데 처리할 수 없을 경우엔 singleton app object로 전달됩니다.

application 객체가 처리할 수 없을 경우엔 해당 이벤트는 삭제됩니다.

리스폰더 체인을 관리하는 메소드는 다음과 같습니다.

e.g.) var next: UIResponder?, var isFirstResponder: Bool, func becomFirstResponder() 등


댓글

  1. 백본을 구성한다는 것은 어렵게 생각할 필요 없습니다.

    네트워크 백본을 기반으로 이해하쉬면 쉽습니다.

    백본 네트워크는 소형 네트워크들을 묶어 파이프라인을 통해 높은 대역폭의 다른 네트워크 집합과 연결되는 네트워크를 의미합니다.

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

UIApplication 알아보기

AppDelegate.swift 알아보기