HomeViewController - HelloMocca/BattleAppforiOS GitHub Wiki

SuperClass : BAViewController

Description

App을 처음 Launch했을 경우 나타나는 View를 제어한다.
가장 최근 기사를 상단에 mainArticleView로 노출시키고 날짜순으로 서브기사를 메인기사의 아래에 나열한다.
추가 기사를 요청하기 위해서 View More Articles 버튼을 제공한다.

Specification

  1. 1개의 메인기사와 4개 이상의 서브기사를 가진다.
  2. View More Articles 버튼으로 추가로 5개의 기사를 보여준다.
  3. 서버로부터 요청 한번에 20개의 기사를 가져온다.(JSON Type)
  4. 네비게이션바는 보이지 않는다.
  5. 기사에 대한 View는 스크롤 뷰에 SubView로 추가된다.
  6. 스크롤 뷰의 Scroll Indicator는 보이지 않도록 한다.

Properties

NSMutableArray *articles

HomeViewController에 나타날 뉴스기사(Article)의 배열.

CGSize screenSize

mainScreen의 size값

UIScrollView *mainScrollView

HomeViewController의 rootView의 subView로서 mainArticleView와 subArticleContainerView를 가진다. subArticleContainerView의 크기가 늘어나면 mainScrollView의 사이즈 또한 증가한다.

UIButton *moreArticleBtn

HomeViewController의 rootView의 subView로서 5개의 추가 기사를 요청하는 tap이벤트를 받는다.

UIView *subArticleContainerView

mainScrollView의 subView로서 4개 이상의 SubArticleView를 subView로 가지며 추가 기사가 요청될 경우 view의 height가 늘어난다.

[BAWebViewController] (https://github.com/HelloMocca/BattleAppforiOS/wiki/BAViewController) *articleDetailViewController

MainArticleView 또는 SubArticleView에 tap이벤트가 발생할 경우 초기화되는 BAWebViewController를 참조한다.

MainArticleView *mainArticleView

mainScrollView의 SubView로서 메인기사를 보여줄 MainArticleView를 참조한다.

int totalSubArticleCount

현재까지 화면에 출력된 서브 기사 수에 대한 값을 가진다.

Initialize 메서드

- init
return: HomeViewController instance

superClass의 init을 수행하며 screenSize값과 totalSubArticleCount에 대한 초기화를 수행한다.

UIViewController Override 메서드

- viewDidLoad

SubView를 초기화하는 setupSubViews를 호출.

- viewWillAppear

네비게이션바를 완전투명하게(Alpha:0) 전환한다. articleDetailViewController의 참조를 제거한다.

- didReceiveMemoryWarning

Data 요청메서드

- requestNewsData

API를 통해 20개의 뉴스기사 데이터를 요청한다. Synchronous로 동작한다. 응답으로 데이터를 받으면 Main Thread에서 attachNewsArticles가 호출되도록 한다.

- attachNewsArticles:(NSDictionary *)jsonObject

jsonObject가 비어있는지 체크한다. 비어있을경우 로그를 출력하고 수행을 종료한다.
json형태로 되어있는 기사정보를 파싱하여 Article Object로 매핑하고 articles 배열에 추가한다.
attachMainArticle을 호출한다. setupSubArticleView를 호출한다. setupMoreArticleBtn을 호출한다.

View Setting 메서드

- setupSubViews

각각의 서브뷰에 대한 세팅 메서드를 호출한다.

- setupScrollView

mainScrollView에 대한 초기화 작업을 수행한다.

- setupNews

최초 뉴스데이터에 대한 요청을 보낸다.
mainArticleView에 대한 초기화를 수행하는 setupMainArticleView를 호출한다.

- setupMainArticleView

mainArticleView를 초기화하고 mainScrollView에 subView로 추가한다.

- setupSubArticle

SubArticleView를 subView로 가지는 subArticleContainerView를 초기화한다.
최초 4개의 SubArticleView를 추가하는 attachSubArticleBegan:toEnd를 호출한다.

- attachMainArticle

메인 뉴스기사의 이미지, 제목, 작성자, 생성일을 출력하고 GestureRecognizer를 추가하여 tap 이벤트를 대기한다.

- attachSubArticleBegan:(int)beganOffset toEnd:(int)endOffset

endOffset이 beganOffset보다 작거나 같을경우 수행을 종료한다.
시작 오프셋인 beganOffset과 종료 오프셋인 endOffset을 받아 기사를 담고있는 배열인 articles에서 해당 offset에 포함되는 기사를 차례대로 subArticleView로 생성하여 추가한다.
추가된 기사에 따라서 subArticleContainerView의 Frame과 mainScrollView의 contentSize를 재설정한다.

- refreshMoreArticleBtnPosition

현재 추가된 기사의 개수에 따라 추가 기사출력을 요청하는 MoreArticleBtn의 위치를 재설정한다.

Event Handle 메서드

- articleTap:(UITapGestureRecognizer *)recognizer

MainArticleView 또는 SubArticleView에 대한 tap 이벤트가 발생할 경우 호출된다.
해당 기사를 보여주기위해 BAWebViewController를 생성하여 navigationController에 push한다.

- (IBAction)moreArticleRequest:(id)sender

MoreArticleBtn을 tap 할 경우 호출된다. 추가로 5개의 서브기사를 출력하도록 attachSubArticleBegan:toEnd를 호출한다.

Comment

  • 뉴스기사를 담당하는 mainScrollView를 별도의 클래스로 분리할 수 있을 것 같아보임.