https://developer.apple.com/documentation/uikit/uiscreen
"An object that defines the properties associated with a hardware-based display."
하드웨어 기반 디스플레이에 관련이 있는 속성을 정의하는 객체입니다.
@MainActor class UIScreen : NSObject
iOS 기기는 메인 스크린을 갖게 되며, 0개 혹은 더 많은 스크린을 갖습니다. tvOS 기기는 기기에 연결된 텔레비전에 대한 메인 스크린을 갖습니다. 기기에 있는 각각의 디스플레이에 대한 스크린 객체를 가져오기 위해 이 클래스를 사용하시기 바랍니다. 각 스크린 객체는 관련 디스플레이 및 brightness
와 같은 다른 관심 속성에 관련이 있는 bounds 사각형을 정의합니다. iOS 8 및 이후 버전에서 스크린의 bounds 속성은 스크린의 인터페이스 orientation을 갖습니다. 이 동작은 portrait orientation에 있는 기기에 대한 bounds가 landscape orientation에 있는 기기의 bounds와 같지 않음을 의미합니다. 스크린 차원에 의존하는 앱은 해야 하는 모든 계산에 대한 참조의 고정된 포인트로써 fixedCoordinateSpace
속성에서 객체를 사용할 수 있습니다. (iOS 8 이전 버전에서 스크린의 bounds 사각형은 항상 portrait-up orientation에 상대적인 스크린 차원을 반영합니다. landscape로 혹은 upside-down orientation으로 기기를 회전하는 것은 bounds를 변경시키지 않습니다.)
사용자가 디스플레이를 iOS 기기에 연결하거나 연결을 해제할 때 시스템은 앱으로 적합한 노티피케이션을 전달합니다. 앱 딜리게이트와 같은 앱의 long-lived 객체로부터 노티피케이션을 관찰하시기 바랍니다. 연결 및 연결 해제 노티피케이션은 어느 시점에서라도 발생할 수 있으며, 앱이 백그라운드에서 중지될 때에도 그렇습니다. 노티피케이션이 도착할 때 앱이 중지된 상태이면, 노티피케이션은 앱이 포어그라운드 혹은 백그라운드(옵저버 객체에 전달되는 시점인)에서 다시 실행될 때까지 큐에 있습니다.
새로운 외부 디스플레이가 연결되는 노티피케이션을 가져오는 경우 가능한 추가 스크린 공간을 사용하시기 바랍니다. 공산을 사용하려면 윈도우 객체를 생성하고, 새 스크린을 스크린 속성으로 할당해야 하며, 윈도우를 나타내야 합니다. 그렇게 하는 것은 윈도우의 컨텐츠가 앱이 포어그라운드로 진입할 때 디스플레이를 표시되도록 합니다. 추가 스크린을 생성하지 않거나 윈도우를 생성하더라도 나타내지 않도록 하는 경우 검은 필드가 외부 디스플레이에서 표시됩니다.
UIScreen
은 연결 및 연결해제 노티피케이션에 대한 두 개의 샘플로 핸들러 메소드를 나타냅니다. 연결 핸들러는 두 번째 윈도우를 생성하고, 이 윈도우를 새로운 연결된 스크린에 연결시키며, 앱의 뷰 컨트롤러(커스텀 viewController
속성으로 나타낼 수 있는) 중 하나에게 윈도우로 컨텐트를 추가하길 요청하고, 컨텐트를 보여주도록 합니다. 연결해제 핸들러는 윈도우를 해제하고 메인 뷰 컨트롤러에게 알려줌으로써 프리젠테이션을 그에 따르도록 조정할 수 있게 합니다.
Listing 1 Handling connect and disconnect notifications
- (void)handleScreenConnectNotification:(NSNotification*)aNotification {
UIScreen* newScreen = [aNotification object];
CGRect screenBounds = newScreen.bounds;
if (!_secondWindow) {
_secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
_secondWindow.screen = newScreen;
// Set the initial UI for the window and show it.
[self.viewController displaySelectionInSecondaryWindow:_secondWindow];
[_secondWindow makeKeyAndVisible];
}
}
- (void)handleScreenDisconnectNotification:(NSNotification*)aNotification {
if (_secondWindow) {
// Hide and then delete the window.
_secondWindow.hidden = YES;
[_secondWindow release];
_secondWindow = nil;
// Update the main screen based on what is showing here.
[self.viewController displaySelectionOnMainScreen];
}
}
여러 스크린은 다중 레졸루션을 지원하며, 몇 가지는 다른 픽셀 aspect ratio를 사용합니다. 스크린 객체는 기본값으로 가장 일반적인 스크린 모드를 사용하지만, 사용하고자 하는 컨텐트에 더 적합한 한 가지 모드로 변경시킬 수 있습니다. 예를 들어 OpenGL ES를 사용해서 게임을 구현하고 있고 텍스쳐가 640 x 480 픽셀 스크린으로 디자인되는 경우, 더 높은 기본값 레졸루션을 갖는 스크린으로 스크린 모드를 변경할 수 있습니다.
기본값이 아닌 다른 한 가지 스크린 모드를 사용할 계획을 갖고 있다면, 스크린을 윈도우에 연결시키기 전에 UIScreen
객체에 해당 모드를 적용하시기 바랍니다. UIScreenMode
클래스는 단일 스크린 모드의 특성을 정의합니다. 스크린이 지원하는 모드의 리스트는 availableModes
속성으로부터 가져올 수 있으며, 요구와 일치하는 한 가지에 대한 리스트를 통해서 반복할 수 있습니다.
스크린 모드에 대한 더 많은 정보는 UIScreenMode
를 보시기 바랍니다.
UIScreenMode
https://developer.apple.com/documentation/uikit/uiscreenmode
https://velog.io/@panther222128/UIScreenMode
앱으로부터 추가적인 컨텐트로 연결된 디스플레이를 채웁니다.
https://developer.apple.com/documentation/uikit/windows_and_screens/displaying_content_on_a_connected_screen
https://velog.io/@panther222128/Displaying-Content-on-a-Connected-Screen
스크린 객체에 적용될 수 있는 특성의 집합입니다.
https://developer.apple.com/documentation/uikit/uiscreenmode
https://velog.io/@panther222128/UIScreenMode