Overview

기능 정의

화면 1

  1. 화면
  • 탭 인터페이스와 내비게이션 인터페이스의 결합 형태입니다.
    • 첫 번째 탭은 ‘Table’, 두 번째 탭은 ‘Collection’ 타이틀로 구성합니다.
    • 첫 번째 탭 화면은 테이블형태로, 두 번째 탭 화면은 컬렉션 형태로 같은 데이터를 사용하여 콘텐츠를 표시합니다.
  • 테이블 화면
    • 테이블뷰 셀에 영화 포스터를 보여줍니다.
    • 포스터 오른편에 영화정보(제목, 등급, 평점, 예매순위, 예매율, 개봉일)를 보여줍니다.
  • 컬렉션 화면
    • 컬렉션뷰 셀에 영화 포스터와 등급을 함께 보여줍니다.
    • 포스터 아래 영화정보(제목, 평점, 순위, 예매율, 개봉일)를 보여줍니다.
  • 내비게이션 아이템의 타이틀은 영화 정렬기준을 표시합니다.
  • 내비게이션바 오른쪽 부분에는 내비게이션 아이템으로 바 버튼이 있습니다.
    • 바 버튼은 정렬방식을 선택하기 위한 버튼입니다.
  1. 기능
  • 화면 오른쪽 상단 바 버튼을 눌러 정렬방식을 변경할 수 있습니다. (예매율/큐레이션/개봉일 기준)
    • 테이블뷰와 컬렉션뷰의 영화 정렬방식은 동일하게 적용됩니다. 즉, 한 화면에서 변경하면 다른 화면에도 변경이 적용되어 있어야 합니다.
  • 테이블뷰와 컬렉션뷰를 아래쪽으로 잡아당기면 새로고침됩니다.
  • 테이블뷰/컬렉션뷰의 셀을 누르면 해당 영화의 상세 정보를 보여주는 화면 2로 전환합니다.

화면 2

  1. 화면
  • 화면2 내비게이션 아이템 타이틀은 이전 화면에서 선택된 영화 제목입니다.
  • 영화 상세정보 화면을 구현합니다.
    • 영화 포스터를 포함한 소개, 줄거리, 감독/출연 그리고 한줄평을 모두 포함합니다.
    • 한줄평에는 작성자의 프로필, 닉네임, 별점, 작성일 그리고 평을 보여줍니다.
    • 한줄평 오른쪽 상단에는 새로운 한줄평을 남길 수 있는 버튼이 있습니다.
  1. 기능
  • 영화 포스터를 터치하면 포스터를 전체화면에서 볼 수 있습니다.
  • 한줄평 오른쪽 상단의 새로운 한줄평 남기기 버튼을 탭하면 화면3으로 전환합니다.

화면 3

  1. 화면
  • 별점을 남길 수 있는 별점선택 영역이 있습니다.
  • 닉네임을 작성할 수 있는 텍스트필드가 있습니다.
  • 한줄평을 작성할 수 있는 텍스트뷰가 있습니다.
  • 내비게이션 아이템으로 ‘완료’와 ‘취소’버튼이 있습니다.
  1. 기능
  • 영화에 대한 한줄평을 남길 수 있습니다.
    • 5개의 별을 터치 또는 드래그해서 별점을 선택할 수 있습니다.
    • 선택된 별이 숫자로 환산돼 별 이미지 아래쪽에 보입니다.
    • 별점은 0~10점 사이의 정수단위입니다.
  • 작성자의 닉네임과 한줄평을 작성하고 ‘완료’ 버튼을 누르면 새로운 한줄평을 등록하고 등록에 성공하면 이전화면으로 되돌아오고, 새로운 한줄평이 업데이트됩니다.

  • 닉네임 또는 한줄평이 모두 작성되지 않은 상태에서 ‘완료’ 버튼을 누르면 경고 알림창이 뜹니다.
  • ‘취소’버튼을 누르면 이전 화면으로 되돌아갑니다.
  • 기존에 작성했던 닉네임이 있다면 화면3으로 새로 진입할 때 기존의 닉네임이 입력되어 있습니다.

추가사항

  1. Grand Central Dispatch
  • 백그라운드 네트워킹
    • 네트워킹은 백그라운드 스레드에서 진행되어야 합니다.
  • 이미지 로드
    • 테이블뷰/컬렉션뷰 셀의 이미지 불러오기는 비동기로 백그라운드 스레드에서 처리해야 합니다.
  • 메인 스레드
    • UI 요소 표기는 메인 스레드에서 진행해야 합니다.
  1. Networking
  • Indicator
    • 네트워킹 동작중(로딩/새로고침)에는 상태표시줄(status bar)와 화면에 인디케이터를 사용해 사용자에게 네트워킹 중임을 정확히 표시해야 합니다.
  • Result Handling
    • 데이터 수신 또는 한줄평 등록에 실패한 경우, 알림창을 통해 사용자에게 결과를 표시해야 합니다.
  • URLSession
    • 영화정보를 가져오거나 한줄평을 등록하는 과정은 첨부한 API 문서를 참고하여 URLSession을 활용하여 서버와 통신합니다.