UIKit에는 있고 SwiftUI에는 없는 것 - viewDidAppear #99
shippingpark
started this conversation in
Idea
Replies: 1 comment 1 reply
-
|
좋은 정보 감사합니다! 이 부분에 대해서 궁금해서 더 찾아보았는데, Hacking With Swift에서는 각각 viewDidAppear() 와 viewDidDisappear()에 대응된다고 나와있고, 이 문서에서는 "SwiftUI는 UIKit(AppKit)과 같은 방식의 뷰와 뷰 생명주기를 가지고 있지 않습니다." 라고 합니다. 공식 문서에서는 또 적용하는 뷰 유형에 따라 다르다고 나와있네요.. 아무래도 이렇게 경험적인 방법으로 추측하는게 가장 정확할 듯 싶습니다.. |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
안녕하세요! 3기 보노입니다.
최근
UIKit으로SwiftUI에는커스텀 화면 전환(transition)이 끝난시점을 알려주는 메서드가 없음을 깨달았습니다.onAppear는 화면이 자리 잡은 시점이 아닌, 보이는 시점에 불리는 메서드이기 때문입니다.과거에
onAppear가 실행되는 시점에 대한 고민을 한 적이 있습니다.그러니
onAppear는 UIKit의 뷰컨트롤러 생명주기 메서드와의 비교하자면 무엇과 같은 지,제가 필요로 하는
커스텀 화면 전환(transition)이 끝난시점은 어떤 메서드를 통해 알 수 있는 지 가볍게 적어 보았습니다!(보다 딥한 내용은 다루지 않습니다! )
SwiftUI의
onAppear메서드란?SwiftUI에서
onAppear는 뷰가 사용자에게 보이기 시작할 때 실행되는 메서드입니다.예를 들어, A 화면에서 B 화면으로 전환할 때, B의
onAppear는 B 화면이 생성되어 뷰 계층에 포함될 때 호출됩니다.이 시점은 전환 애니메이션이 끝나기 전일 수 있어, 후속 애니메이션이 전환 도중에 시작되게 됩니다.
(영상 첨부하겠습니다!)
UIKit의 ViewController LifeCycle
UIKit에서는 뷰의 상태에 따라 호출되는 여러 생명주기 메서드가 있습니다.
그중 본문에서 언급될 두 가지는 다음과 같습니다:
viewWillAppear(_:): 뷰 컨트롤러의 뷰가 화면에 표시되기 직전에 호출. SwiftUI의onAppear가 실행되는 시점과 같음viewDidAppear(_:): 뷰 컨트롤러의 뷰가 완전히 화면에 표시된 후 호출. 화면이 제 자리를 잡은 후에 실행되는 메서드저는 화면 전환이 끝난 뒤, B 화면이 자리 잡은 시점에 애니메이션 실행을 구현해야 합니다.
그러니
viewWillAppear메서드가 아닌viewDidAppear를 필요로 했습니다!둘의 시점에는 어떤 차이가 있을까요?
먼저 SwiftUI의 onAppear 메서드 실행시점을 보며
viewWillAppear의 실행 시점도 추측해 보겠습니다코드 예시
SwiftUI 코드
설명:
AView에서 버튼을 눌러showB상태를 변경하면 BView가 표시됩니다onAppear**는 B 뷰가 화면에 추가될 때 호출됩니다onAppear가 실행되면Text("onAppear")이 화면에 서서히 나타나게 됩니다onAppear가 실행되는 시점을 확인하면 아래와 같습니다This is B텍스트와onAppear의 생성이 동일한 게 보이실 겁니다!onAppear의 실행이 뷰가 정해진 위치에 도달하는 순간이 아닌, 생성을 자체를 기준으로 함을 알 수 있습니다현재 제가 구현해야 하는 화면은 전환 애니메이션이
끝난 뒤실행 되기를 기대하기 때문에화면 전환에 소모되는 시간만큼 애니메이션 실행 delay를 주어야 원하는 화면을 구현할 수 있습니다
UIKit 코드
설명:
viewDidAppear메서드가 실행되면 detailLabel이 화면에 등장하게 됩니다화면이 고정된 뒤에 onAppear 텍스트가 등장함을 확인할 수 있습니다
영상을 통해 확인할 점
영상을 보면 두 가지 상황을 비교할 수 있습니다:
onAppear: 화면 생성과 동시에 호출viewDidAppear: 화면 전환이 끝난 후에 호출UIKit
viewWillAppearviewDidAppear가 아닌viewWillAppear도 간단히 확인해보겠습니다.화면 생성과 동시에 빨간색 텍스트가 올라옴 을 확인할 수 있습니다 !
즉, UIKit의
viewWillAppear와 SwiftUI의onAppear는화면이 보이는 시점에 호출되는 메서드임을 알 수 있습니다.
마치며
두 프레임 워크가 화면 생성 시점을 알려주는 시점을 이해하고,
필요에 따라 적절한 시점을 고려하는 데 도움이 되기를 바랍니다!
Beta Was this translation helpful? Give feedback.
All reactions