UIView

Dev Weeks: 작업 효율을 높이기 위한 유니티 UI 제작 프로그래밍 패턴들
https://www.youtube.com/watch?v=_jW_D2vF9J8

 

 

UINavigation을 통해 레퍼런스를 받고, 

var newPage = UINavigation.Push("PageName"); // 특정 UI를 엶
var previoursPage = UINavigation.Pop(); // 현재 UI를 끄고, 직전 UI를 엶

 

 

각각의 UIView는 하나의 페이지를 뜻함.

UINavigation에는 UIView의 스택이 존재

 

프리팹에서 인스턴스화 vs 씬에 UIView 미리배치

 

 

프리팹에서 인스턴스화

Push할 경우 UIView는 이름만으로 어드레서블에서 프리팹을 찾아서 스폰함.

UIView somePage = UIView.Get("pageName");
somePage.Show();

   - Push 할 경우 마지막 UIView의 Hide 실행

   - Push한 UIView의 인스턴스화 + Show 실행

   - 생성한 UIView를 히스토리 스택에 Push

 

열었던 페이지의 중복이 발생한 경우 프리팹이 두개가 됨.

 

장점 : 컨텍스트 복구가 쉽다.

단점 : 플레이 버튼을 누르기 전까지는 전체 페이지를 확인 불가능하다.

         페이지가 여러개 생성된다.

 

 

씬에 UIView가 미리 존재

Push할 경우 해당 타입의 UIView를 찾음. 

 - 해당 타입의 UIView를 찾음

 - 해당 View를 스택에 추가

 - 해당 View의 Show()를 실행

 

 

UIView

public VisibleState visibleStage;

public Show();
public Hide();
public ShowImmediate();
public HideImmediate();

public enum VisibleState
{
    Appearing, 
    Appeared, 
    Disappearing, 
    Disappeared,
}

 - VisibleState를 만든이유

   - 트랜지션 중에는 유아이 인풋을 블로킹하기 위해

   - 다른 UI가 Appearing일 때, 다른 UI가 동시에 Appear 요청이 들어온경우의 처리 등

   - 팝업의 경우 Queue에 넣는 등의 처리가 필요함

 

UINavigation

public UIView Current;
public UIView Push(string viewName);
public UIView Pop();
public UIView PopTo(string viewName);
public UIView PopToRoot(); 첫번째 UIView까지. (한개 남을 때까지?)

사용 예시

var characterInfoPage = UINavigation.Push("Characterpage") as UICharacterInfoPage;
characterInfoPage.Setup(_characterData);

 

문제점

스택이 하나밖에없어서 플랫 내비게이션이 힘들다.

플랫 내비게이션의 경우에는 뷰 마다 별도로 스택을 만들어서 상태를 유지한다. 

 

해결 방법

UINavigationController을 도입하자!
한 번에 하나의 내비게이션만 활성화한다.

스위칭 할 경우 모든 뷰 들이 Hide()가 호출됨.

 

팝업의 경우

- 팝업은 페이지와 달리 오버레이로 뜰 수 있음.

- 프리팹에서 인스턴스화.

Popup.GetPrefab("Default");

- 큐를 사용.

var popup = PopupManager.Enqueue(Popup.GetPrefab("Default"));
popup.SetText("messageField", message);
popup.SetButtonData(
    new ButtonData{
        text="No",
        (button) => Debug.Log("No Button Clicked");,
    new ButtonData{
        text="Yes",
        (button) => Debug.Log("Yes Button Clicked")
    });

 

UIView 작업 플로우

- 마스터 캔버스 자식으로 UIView 프리팹들을 붙임

  (네이밍 View - HOME, View - ALBUM 등으로 통일하면 좋다.)

- 버전 관리를 위해 씬이 아닌 프리팹 단위로 작업

 

 

 

 

 

 

 

댓글

Designed by JB FACTORY