[번역] viewIsAppearing(_:) (애플 공식 문서)

삭제된 Velog·2024년 8월 15일

UIKit

목록 보기
1/21
post-thumbnail

본 글은 viewIsAppearing(_:) (애플 공식 문서)를 한국어로 번역하여 옮긴 글입니다.

시스템이 뷰 컨트롤러의 뷰를 뷰 계층 구조에 삽입했다고 뷰 컨트롤러에게 알려줍니다.

iOS 13.0+ | iPadOS 13.0+ | Mac Catalyst 13.1+ | tvOS 13.0+ | visionOS 1.0+

func viewIsAppearing(_ animated: Bool)

Discussion

시스템은 viewWillAppear(_:) 메서드가 호출되고 난 후 뷰 컨트롤러의 뷰가 나타날 때 한번 이 메서드를 호출합니다. viewWillAppear(_:) 메서드와는 달리, 시스템은 뷰 컨트롤러의 뷰를 뷰 계층 구조에 삽입하고, 상위 뷰가 뷰 컨트롤러의 뷰의 레이아웃을 설정(lays out)하고 난 후 이 메서드를 호출합니다. 시스템이 이 메서드를 호출하는 시점에 뷰 컨트롤러와 뷰 컨트롤러의 뷰는 최신 상태의 트레잇 컬렉션(Trait Collection)을 받게 되며, 뷰는 정확한 지오메트리(Geometry)를 가지게 됩니다.

개발자는 이 메서드를 오버라이딩(override)해 보여지는 뷰와 연관된 커스텀 작업을 수행하도록 할 수 있습니다. 예를 들어, 개발자는 뷰 또는 뷰 컨트롤러의 트레잇 컬렉션에 기반해 뷰를 구성하거나 업데이트하기 위해 이 메서드를 사용할 수 있습니다. 또는 스크롤 위치를 계산하는 건 뷰의 사이즈나 지오메트리에 기반하기 때문에, 개발자는 뷰가 보여질 때 컬렉션이나 테이블 뷰에 선택한 셀이 바로 스크롤이 되도록 할 수 있습니다.

만약 이 메서드를 오버라이딩한다면, 개발자는 구현부에 super를 호출해야 합니다.

Choosing the appropriate callback

비록 시스템이 이 메서드를 viewWillAppear(_:) 메서드를 처리하고 난 후 호출하더라도, 두 콜백(callback)은 동일한 CATransaction에서 발생합니다. 이는 개발자가 두 메서드에서 변화를 준다 하더라도 사용자에게는 동일한 시간에 보인다는 걸 의미합니다.

시스템이 viewWillAppear(_:) 메서드를 호출할 시점에는 트레잇과 지오메트리가 최신 상태가 아니지만, viewIsAppearing(_:) 메서드를 호출할 시점에는 최신 상태이므로 이때 뷰를 업데이트하세요.

아래 케이스를 충족할 때만 viewWillAppear(_:) 메서드를 사용하세요.

  • transitionCoordinator 프로퍼티에 접근하여 얼롱사이드 애니메이션(Alongside Animation)을 추가하는 경우와 같이 개발자가 뷰 전환이 시작되기 전 작업을 처리해줄 필요가 있을 때 사용하세요. 얼롱사이드 애니메이션(Alongside Animation)은 개발자가 프레임워크로 하여 뷰 컨트롤러 전환 애니메이션을 수행하도록 하는 애니메이션입니다.

  • 뷰 컨트롤러나 뷰의 트레잇, 계층 구조나 지오메트리에 의존적이지 않은 어떤 작업을 처리해줄 필요가 있을 때 사용하세요. viewWillAppear(_:) 메서드에 데이터베이스 노티피케이션(notification)을 등록하거나 viewDidDisappear(_:) 메서드에 등록 해제를 하는 케이스에서 사용하세요.

이외 다른 케이스에서는 뷰를 업데이트하기 위해 viewIsAppearing(_:) 메서드를 사용하세요.

콜백 시 상태viewWillAppear(_:)viewIsAppearing(_:)
얼롱사이드 애니메이션 추가 가능한 전환 코디네이터(Transition Coordinator)
뷰가 뷰 계층 구조에 삽입
뷰 컨트롤러와 뷰의 트레잇 컬렉션 업데이트
정확한 뷰 지오메트리(사이즈, 안전 영역 등)

시스템은 뷰가 layoutSubviews() 메서드를 호출할 때마다 부르게 되는 viewWillLayoutSubviews()viewDidLayoutSubviews() 메서드를 뷰가 보이거나 전환을 하는 동안 수 차례 호출할 수 있습니다. 그러나, 시스템은 viewIsAppearing(_:) 메서드를 전환을 하는 동안에 오직 한번만 호출합니다. 심지어 뷰가 나타날 때 레이아웃을 할 필요가 없더라도 이 메서드는 호출됩니다.

뷰 컨트롤러가 어떻게 뷰를 뷰 계층 구조에 삽입하고, 일련의 메시지를 생성하는지 알아보려면 Displaying and managing views with a view controller를 참조하세요.

profile
rlarjsdn3.github.io

0개의 댓글