공식문서

View Programming Guide for iOS

motosw3600 2021. 12. 15. 15:33

아래의 글은 View Programming Guide for iOS의 일부를 번역한 글입니다.

View And Window Architecture

view와 window는 앱의 유저 인터페이스를 보여주고 인터페이스의 상호작용을 다룬다. UIKit과 다른 여러 프레임워크들은 여러 뷰들을 제공하고 있다. 또한 앱을 표준화된 View와 달리 커스텀하여 지정할 수 있다. 나만의 커스텀뷰를 사용할때 UIViewUIWindow의 개념과 구조에대해 이해해야 한다. 이러한 기능이 작동하는 것을 이해하는 것은 어플리케이션에 변화가 일어났을 때 View가 적절하게 동작하게 하는데 중요하다.

View Architecture Fundamentals

시각적인 대부분의 작업은 UIView의 인스턴스인 view 객체로 수행된다. view 객체는 화면의 직사각형의 영역을 정의하고 영역의 그리기 및 터치이벤트를 처리한다. view는 다른 view의 부모역할도 하고 view의 배치 및 크기를 조정할 수도 있다. UIView 클래스는 이런 view들사이의 관계를 관리할 수 있고 필요에 따라 사용자 지정으로 커스텀할 수도 있다.

View는 컨텐츠 렌더링 및 애니매이션을 처리하기 위해 Core Animation과 함께 동작한다. UIKit의 모든 View는 view의 백업 저장소를 관리하고 view관련 애니매이션을 처리하는 layer객체(보통 CALayer의 클래스의 인스턴스)에 의해 지원된다. 보통 대부분의 동작은 UIView 인터페이스를 통해 수행할 수 있다. 하지만 view의 렌더링과 애니매이션을 더많이 제어할때 대신 layser를 통해 작업을 수행할 수 있다.

view와 layer의 관계를 이해하기 위해 아래의 예제사진이 이해를 도와준다. 아래의 view architecture는 Core Animation layer의 관계와 함께 ViewTransitions 샘플 어플리케이션을 보여준다. 이 view들은 window, 일반 UIView, ImageView, control을 표시하기위한 툴바 등을 포함하고 있다. 모든 view들은 해당 view의 layer 속성에서 엑세스 할 수 있는 해당 layer객체가 존재한다.

 

 

View Hierarchies and Subview Management

view를 다른 view에 포함되면 부모-자식 관계가 두개의 view사이에 생기게 된다. 자식뷰는 subview고 부모뷰는 superview가 된다. 상위뷰의 크기를 변경하면 하위뷰의 크기와 위치도 변경될 수 있다. 뷰의 계층은 앱이 이벤트에 어떻게 응답할지를 결정한다. 특정뷰에서 터치가 일어나면 터치이벤트의 정보를 처리할 view로 전달한다. 하지만 해당 view에서 이벤트를 처리하지 못하면 부모뷰에게 이벤트를 넘긴다. 이렇게 이벤트가 넘겨지는 행위를 Responder chain이라고 한다. Responder chain에는 viewController도 포함되어 있다. 만약 어떤객체도 이벤트를 처리하지 못하면 계속 상위뷰로 올라가다 Application객체까지 올라가고 무시된다.

Points Versus Pixels

iOS에서 모든 좌표와 거리값은 points라고하는 부동소수점을 사용한다. point의 측정가능한 사이즈는 device의 크기에 따라 다르다. points에 대한 이해중 중요한점은 drawing을 위한 고정된 프레임을 제공한다는 점이다. 
이러한 포인트 기반 측정 시스템은 표준 좌표 공간을 제공한다. 이러한 좌표시스템을 기반으로 여러 요소들을 배치하게 된다.
디바이스마다 하나의 point는 각자 다른 pixel을 가지게 된다. 가끔 하나의 point가 한 pixel에 대응되기도 하지만 하나의 point가 화면의 한 pixel과 반드시 일치하는 것은 아니다.
device레벨에서 모든 좌표들은 특정시점에서 픽셀단위로 변경된다. 하지만 이런 매핑하는 과정은 전적으로 시스템에의해 처리된다. 때문에 1 point가 1x1 pixel인 디바이스와 아닌 디바이스에서 100x100 pixel의 이미지는 같은 픽셀 크기지만 각각의 디바이스에선 다른 크기로 보여지게 된다. 이를 해결하기 위해 서로다른 픽셀밀도로 이미지를 지정하고 디바이스가 해당 해상도에 맞추어 이미지를 로딩한다. 이 이유로 낮은 픽셀은 해상도가 큰 디바이스에서 깨져보이게 된다.

 

 

출처 : https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/Introduction/Introduction.html