https://developer.apple.com/documentation/uikit/uitraitcollection
"The iOS interface environment for your app, including traits such as horizontal and vertical size class, display scale, and user interface idiom."
수평 및 수직 사이즈 클래스, 디스플레이 스케일, UI idiom과 같은 특성을 포함하고 있는, 앱을 위한 iOS 인터페이스 환경입니다.
class UITraitCollection : NSObject
iOS 특성 환경은 UITraitEnvironment
프로토콜의 traitCollection
속성을 통해 노출됩니다. 이 프로토콜은 UIScreen
, UIWindow
, UIViewController
, UIPresentationController
, UIView
클래스들에 의해 채택됩니다. 적응형 인터페이스를 구현하려면, 이러한 특성 변경사항에 따라 앱의 레이아웃을 조정하는 코드를 작성하시기 바랍니다. UITraitCollection
의 horizontalSizeClass
, verticalSizeClass
, displayScale
, userInterfaceIdiom
속성을 사용해서 특정 특성 값에 접근할 수 있습니다. idiom과 크기 특성을 표현하는 값은 UIUserInterfaceIdiom
및 UIUserInterfaceSizeClass
열거형애 정의되어 있습니다. 디스플레이 스케일 특성에 대한 값은 floating 포인트 숫자로 표현됩니다.
뷰 컨트롤러 및 뷰가 iOS 인터페이스 환경에서 변경사항에 대해 반응적인 형태로 만드려면, 특성 환경 프로토콜로부터 traitCollectionDidChange(_:)
메소드를 오버라이드 해야 합니다. 인터페이스 환경 변화에 대해 응답하는 뷰 컨트롤러 애니메이션을 커스터마이징 하려면, UIContentContainer
의 willTransition(to:with:)
메소드를 오버라이드 해야 합니다.
Figure 1은 다양한 기기의 전체 스크린에서 실행될 때, 앱에서 발생할 수 있는 수평(넓이) 및 수직(높이) 사이즈 클래스를 보여주고 있습니다.
Figure 1 Size classes
아이패드의 슬라이드 오버 및 스플릿 뷰에서 앱이 가질 수 있는 사이즈 클래스에 대한 정보는 Adopting Multitasking Enhancements on iPad에 있는 Slide Over and Split View Quick Start를 살펴보시기 바랍니다.
Slide Over and Split View Quick Start
https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForSlideOverAndSplitView.html#//apple_ref/doc/uid/TP40015145-CH13
특정 환경에 일치하는 보조적인 독립 특성 컬렉션을 생성할 수 있습니다. UITraitCollection
클래스는 네 가지 특수 생성자를 포함하고 있으며, 특성 컬렉션의 배열을 결합시키도록 해주는 init(traitsFrom:)
도 포함하고 있습니다.
독립 특성 컬렉션 사용의 한 가지 중요한 사항은 현재 iOS 인터페이스 환경에 기반해 이미지의 조건적 사용을 활성화하는 것입니다. UIImageAsset
인스턴스의 방법을 통해서 특성 컬렉션과 UIImage
인스턴스를 연결시킬 수 있습니다. UIImageAsset
의 오버뷰에서 설명하고 있습니다. 에셋 카탈로그를 Xcode IDE의 내부로부터 시각적으로 설정하는 것에 대한 더 많은 정보는 Asset Catalog Help를 살펴보시기 발바니다.
UIImageAsset
https://developer.apple.com/documentation/uikit/uiimageasset
https://velog.io/@panther222128/UIImageAsset
아이폰에서 landscape orientation일 때 두 열을 갖는 스플릿 뷰를 활성화시키기 위해 독립 특성 컬렉션을 사용할 수 있습니다. UIViewController
의 setOverrideTraitCollection(_:forChild:)
메소드를 살펴보시기 바랍니다.
UIViewController
https://developer.apple.com/documentation/uikit/uiviewcontroller
https://velog.io/@panther222128/ViewController
독립 특성 컬렉션은 UIAppearance
에서 설명하고 있는 것처럼 뷰 모양을 커스터마이징 하는 것에도 유용하며, appearance(for:)
프로토콜 메소드의 방법으로 구현합니다.
UIAppearance
https://developer.apple.com/documentation/uikit/uiappearance
https://velog.io/@panther222128/UIAppearance
iOS 9을 시작으로 앱이 실행되고 있는 기기에서 3D 터치를 지원하고 있는지 확인하기 위해 이 클래스를 사용할 수 있습니다. 특성 환경을 갖는 앱에서 모든 객체에 있어 특성 컬렉션에 있는 forceTouchCapability
속성의 값을 읽어보시기 바랍니다. 특성 환경에 대한 더 많은 정보는 UITraitEnvironment
를 살펴보시기 바랍니다. 압력 터치 기능 속성의 가능한 값에 대해서는 UIForceTouchCapability
열거형을 살펴보시기 바랍니다.
UITraitEnvironment
https://developer.apple.com/documentation/uikit/uitraitenvironment
https://velog.io/@panther222128/UITraitEnvironment
UIForceTouchCapability
https://developer.apple.com/documentation/uikit/uiforcetouchcapability
https://velog.io/@panther222128/UIForceTouchCapability
사용자가 설정에서 3D 터치를 끌 수 있기 때문에 traitCollectionDidChange(_:)
메소드의 구현에서 forceTouchCapability
속성의 값을 확인해야 하며, 속성의 값에 따라 코드 경로를 조정해야 합니다.
기기에 대한 스크린 영역이 변경될 때 이미지 및 리소스를 동적으로 변경시킵니다.
https://developer.apple.com/documentation/uikit/app_and_environment/responding_to_changing_display_modes_on_apple_tv
https://velog.io/@panther222128/Responding-to-Changing-Display-Modes-on-Apple-TV