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
-
안녕하세요! 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
viewWillAppear
viewDidAppear
가 아닌viewWillAppear
도 간단히 확인해보겠습니다.화면 생성과 동시에 빨간색 텍스트가 올라옴 을 확인할 수 있습니다 !
즉, UIKit의
viewWillAppear
와 SwiftUI의onAppear
는화면이 보이는 시점에 호출되는 메서드임을 알 수 있습니다.
마치며
두 프레임 워크가 화면 생성 시점을 알려주는 시점을 이해하고,
필요에 따라 적절한 시점을 고려하는 데 도움이 되기를 바랍니다!
Beta Was this translation helpful? Give feedback.
All reactions