코디네이터 설정 변경 내용
코디네이터 모드에 익숙하지 않은 사람들에게는 사용과 설정에 관한 블로그 게시물이 많다.이것은 내가 가장 즐겨 보는 부분이다. 왜냐하면 나는 새로운 프로젝트를 세울 때 항상 복습을 해야 하기 때문이다.
var window: UIWindow?
를 찾지 못했을 때 얼마나 놀랐는지 상상해 보자.그냥 거기 없어요.아포 대표
새로운 AppDelegate
AppDelegate와 관련된 일부 의뢰 방법은 애플이 iOS 13을 발표할 때 사용할 수 있는 새로운 파일로 이전되었다는 사실이 증명되었다.
SceneDelegate
와 AppDelegate
의 차이에 대한 개요는 Understanding the iOS 13 Scene Delegate를 참조하십시오.나는 모두에게 이 문장을 읽으라고 강력히 건의하는데, 특히
SceneDelegate
의 수정에 관해서는 이 문장을 소개하지 않을 것이다.영사관
info.plist
파일에 창 속성이 포함되어 있습니다.SceneDelegate
좋아, 별거 아니야, 내가 여기에 내 조율원을 배치할게.역시 안 된다
알겠습니다. 개발자 문서를 보십시오.
var window: UIWindow?
는 여전히 부합AppDelegate
하지만 의뢰 방법은 이미 바뀌었습니다.이것은 여전히 전송 알림을 등록하고, 이 알림에 응답하며, 응용 프로그램 자체를 목표로 하는 이벤트에 응답하는 파일이지만, 응용 프로그램 장면을 설정할 수 있는 새로운 영역도 있습니다. 구체적으로 말하면, 연결하고 버리는 장면을 설정할 수 있습니다.UIApplicationDelegate
파일은 SceneDelegate
에 부합되고 그 자체는 UISceneWindowDelegate
에 부합된다.UISceneDelegate
속성은 window
과 장면과 관련된 메인 창의 일부분이다.UIWindowSceneDelegate
의 관련 함수는 SceneDelegate
의 프로토콜 방법이다.장면이 프론트에 들어가고 백엔드에 들어가며 장면에서 발생하는 다른 생명주기 사건을 처리할 때 응용 프로그램이 해야 할 일을 처리한다.그러나
UISceneDelegate
속성으로 돌아가면 이 변수를 초기화할 수 있는 새로운 방법이 있다.이전에는 window: UIWindow
에서 window 속성을 초기화했습니다.AppDelegate
너는 여전히 이렇게 창을 설정할 수 있다.self.window = UIWindow(frame: UIScreen.main.bounds)
여전히 사용할 수 있습니다.그러나 장면에 대한 소개를 통해 애플은 새로운, 첫 번째 선택 방식으로 초기화UIScreen.main.bounds
를 할 수 있다는 것을 알게 되었다.의뢰 방법
UIWindow
의 내부에는 다음과 같은 주석이 있다.Use this method to optionally configure and attach the UIWindow
window
to the provided UIWindowScenescene
.If using a storyboard, the
window
property will automatically be initialized and attached to the scene.This delegate does not imply the connecting scene or session are new (see
application:configurationForConnectingSceneSession
instead).
따라서 UIScreen을 사용하여 창 프레임을 초기화하는 것보다 다음과 같이 하십시오.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
를 안전하게 열고 scene: UIScene
로 전환한다.UIWindowScene
를 사용하여 초기화window
속성을 사용합니다.UIWindowScene
속성, 이 속성은 현재 UIWindow에서 찾을 수 있으며 첫 번째 단계의 전개windowScene
를 포함한다.코드에서는 다음과 같습니다.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let uiWindow = UIWindow(frame: windowScene.coordinateSpace.bounds)
self.window = uiWindow
self.window?.windowScene = windowScene
}
지금까지 나는 실제 조율원에 관한 어떤 것도 언급하지 않았다.창을 초기화하면 조정기가 매우 간단하기 때문에 나는 둘을 분리하고 싶다.먼저, 프로토콜부터...:)
protocol Coordinator {
func start()
}
다음에 프로토콜에 맞는 응용 프로그램 조정기를 만듭니다.(위의 링크Ray Wenderlich blog post를 예로 AppCoordinator를 사용하고 있습니다.)class AppCoordinator: Coordinator {
let window: UIWindow
let rootViewController: UINavigationController
init(_ window: UIWindow) {
self.window = window
rootViewController = UINavigationController()
let mainVC = MainViewController()
rootViewController.pushViewController(mainVC, animated: true)
}
func start() {
window.rootViewController = rootViewController
window.makeKeyAndVisible()
}
}
이후 windowScene
에서 앞서 언급한 위탁 방법만 수정하면 된다.func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let uiWindow = UIWindow(frame: windowScene.coordinateSpace.bounds)
self.window = uiWindow
self.window?.windowScene = windowScene
let appCoordinator = AppCoordinator(uiWindow)
self.appCoordinator = appCoordinator
appCoordinator.start()
}
스토리보드를 사용하지 않고 프로그램을 설정하는 것을 선택했습니다.줄거리 요약에 대한 인용을 삭제하려면 SceneDelegate
의 SceneConfiguration
에서 주요 줄거리 요약을 찾을 수 있습니다.응용 프로그램 목표plist
에서 삭제하는 것만으로는 부족합니다.원한다면 스토리보드에서 코디네이터를 사용할 수 있습니다. (위에 링크된 Paul Hudson 글 참조)
Reference
이 문제에 관하여(코디네이터 설정 변경 내용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/myerschris78/coordinator-setup-changes-g3f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)