Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

Stacking Fire

UIKit, 안다고 생각했던 것들에 대하여 - 2 본문

개발/iOS

UIKit, 안다고 생각했던 것들에 대하여 - 2

라우비 2018. 3. 1. 15:36

UIViewController를 코드로만 만들 때

기초적인 내용들이지만, 처음부터 스토리보드로 코드를 배우다 보니 몰랐던 것들을 정리해 봅니다.

loadView()

문서

  • view 프로퍼티가 아직 nil일 때 불립니다.
  • IB를 사용한다면 재정의해서는 안 됩니다(must not).
  • view를 수동으로 만들고자 할 때 재정의할 수 있습니다. (하지 않아도 됩니다... 만 viewDidLoad에서 설정을 해주어야 합니다.)
  • 재정의할 때, 'super'를 불러선 안 됩니다(should not).
  • 그 외의 초기화를 하고 싶다면 viewDidLoad()에서 하세요.

viewDidLoad()

문서

  • 초기화를 합니다. 루트뷰 이외의 것들에 대한 초기화를 합니다.

viewWillLayoutSubviews()

When a view'€™s bounds change, the view adjusts the position of its subviews. Your view controller can override this method to make changes before the view lays out its subviews. The default implementation of this method does nothing.

  • 뷰의 바운드가 바뀔 때마다 불립니다. 사실상 로드된 후에 불린다면 스크린이 회전했거나 iPad에서 스플릿 창을 불러냈을 때만 불리게 되어 있습니다.
  • frame을 결정하기 전에 들리는 곳이기 때문에, 첫 오토 레이아웃을 이 안에 넣어서 정리한다면 좋을 거 같습니다.

viewDidLayoutSubviews()

  • 뷰가 레이아웃을 업데이트 한 후에 불립니다.
  • 각 뷰의 frame이 결정된 다음에 해야 할 일들을 여기서 해 주면 된다.

CGAffineTransform.identity

애니메이션 등을 할 때 처음으로 돌아가기 위해 굳이 원래 값을 찾아 넣는 경우가 많았는데, 이걸 사용하면 수정하지 않은 원래 상태로 쉽게 되돌릴 수 있다.

forEach

어레이의 각 멤버에 접근하고 싶을 때 for-in 대신 map을 쓰면서, 리턴 값을 무시하도록 _ = someArray.map { doSomething($0) } 이렇게 사용했었는데, 같은 효과를 내는 함수가 있었습니다. map 리턴 배열이 필요하지 않은 경우 이걸 쓰는 게 좋을 거 같아요.

선언부

func forEach(_ body: (Element) throws -> Void) rethrows

removeAll(keepingCapacity: )

컬렉션을 비울 때 부르는 'removeAll'에다가 'keepingCapacity' 파라미터를 true로 주면, 나중에 그 공간을 다시 쓸 때를 대비해서 저장공간을 유지한다.

Comments