6일차,, 스보에서 오토레이아웃 잡는 게 어렵다..
새삼 몰랐던 방법도 알고, 내가 얼마나 코드 베이스에만 집중했는지 알게 되는.. 순간...
Build Phases
2번째 Compile Source 부분이 우리가 실행될 파일의 위치를 알려준다.
4번째 Copy Bundle Resources에는 예를 들어, Font 파일이 추가될 경우에 여기에도 추가되어야 한다.
Alpha / Opacity
0.0 (투명) ~~~~~ 1.0 (불투명)
1. alpha - UIView에 속함
그래서 해당 뷰 하위에 있는 객체들한테도 속성이 적용됨
2. opacity - CALayer에 속함
하위 뷰에는 적용이 되지 않음
Rendering Mode
Original Image : 원본 이미지의 색상 등등이 그대로 들어옴
Template Image : tint color, 형태만 유지한 것 - 이걸 선택 시에 에셋이 파란색으로 색칠해서 영역만 잡혀서 들어온다.
cornerRadius 값을 줄 때 원으로 만드는 그 원리는 반지름만큼 깎아서 만들어야 하기 때문에 2로 나누는 것임
Button
Switch - 명확하게 on/off 기능이 있기 때문에 Value Changed
Slider - 명확하게 값 변경이 있기 때문에 Value Changed임
Value Changed에 대해서도 알아보자
Constraint / AutoLayout
후,,,, 매번 코드로만 주다보니 스보에서 하려니 왜이렇게 어려운지 모르겠다.
종종 스냅킷에서 쓰던 건데 간격값을 20 이상으로 줄 때 부등호를 통해서 스보에서도 줄 수 있다.
간격이 20 보다 더 크면 컸지, 그 아래로는 대응해주지 않을 때 이렇게 잡는다.
그 반대는 Less Than or Equal (<=) 이다.
label을 스택뷰로 임베드한 것과 다르게 이미지뷰는 오류가 나는 이유?
이미지의 크기를 모르기 때문!
그런데 어떤 뷰를 복사해서 붙여넣기 했는데, constraint가 일부분만 복사되던데, 전체 constraint를 그대로 가져올 순 없는가?
-> 어떤 뷰에 기대지 않고, 자기 자신 스스로 레이아웃을 가진 그 constraint들만 복붙이 된다.
NavigationViewController
- NavigationViewController는 UIViewController를 상속한다.
- 네비게이션 뷰 컨트롤러 - 드릴 다운 인터페이스
- root / child view로 구성
- 화면전환 : push - pop
UINavigationBar 에는 UINavigationItem이 있고, 타이틀 양 사이드에 있는 버튼이 UIBarButtonItem이다.
왼쪽은 LeftBarButtonItem, 오른쪽은 RightBarButtonItem이라고 한다.
NavigationBar UIBarAppearance
UIBarAppearance가 iOS13부터 생겼음 (그 이전에는 barTintColor로 했음)
1. Standard 속성 - iOS15기준으로는 나타나지 않았음
2. Scroll Edge 속성 - default였음
이 아이가 default 값으로, Scroll Edge Background에서 설정해줄 시에 해당 색상이 나온다.
NavigationBar Appearance 기능은 13부터 생겼기 때문에 iOS13이전 버전에서는 쓸 수 없다.
scroll 시에 네비게이션 바의 색상을 변경해주는 기능
Compact는 그럼 머임?
가로모드일 때 width가 콤팩트하고, height는 regular하다
Standard랑 Compact는 같은데 무슨 차이냐면 가로 형태일 때 보여지도록 할 수 있다는 것임
Scroll Edge랑 Compact Scroll Edge랑 같은 바이브임.
여하튼 Compact는 Size Class의 요소이고,
가로모드일 때에 특별히 대응해주기 위한 것임 - 뭐, 예를 들어 가로모드일 때 특정 색을 주고 싶다는 등..
근데 여기 Size Class를 보면 가로모드일 때 Regular인 것도 있고, Compact인 것도 있음
navigation Controller에 연결될 첫 번째 뷰컨은 무조건 relationship Segue의 root view controller로 연결해줘야 한다.
TabBarController
TabBarController에 Badge 기능도 있음
탭바 뷰컨에서 하단 뷰컨들의 위치를 바꾸고 싶으면 꾹 누르고 순서를 바꿀 수 있다
그리고 탭바 뷰컨이 네비뷰컨보다 상위에 있움
TabBarController에 탭바를 10개 넣으면 이렇게 변한다. 오호라 첨 알앗다!
edit을 누르면 탭바 메뉴 순서도 바꿀 수 있다.
NavigationController로 먼저 임베드 하고 탭바 컨트롤러를 연결한 것과
TabBarController로 먼저 임베드 하고 네비 컨트롤러를 연결한 것은 무슨 차이가 있을까?
정답은 탭바 메뉴의 유무
이유가 뭘까? root View Controller가 탭바라서 그런걸까?
iOS15부터 버튼이 4가지로 종류가 생기면서 버튼의 글자수가 길면 줄바꿈이 되는 상황이 발생하는데
이걸 해결하기 위해서는 Plain인 버튼 스타일을 기존 Default로 변경해주면 줄바꿈이 아닌 ... 으로 보여주는 것이 가능하다
overriding / overloading
재정의 / 중복 정의
중요! -> 오버라이딩과 오버로딩은 완전히 다른 개념이다!
재정의 - 상위 클래스에서 선언한 메소드를 재정의해서 사용한다
MainViewController에서 선언해준 함수를 오버라이딩하면 LifecycleViewController에서
따로 backgroundColor를 지정하지 않아도 배경색이 파란색으로 나온다.
그런데 해당 함수 내에 배경색을 노란색으로 주는 코드를 추가적으로 넣으면 노란색이 나오는 걸 볼 수 있다.
super.changeBackgroundColor()를 작성하지 않으면 어떻게 될까?
그동안 항상 출력되었던 "viewController~함수"가 출력되지 않는다.
그 이유는 상속할 시에 super()~ 은 기존 MainViewController의 기능도 가져오겠다는 건데 이를 지워주니
재정의한 기능만 사용한다는 것이기 때문이다.
재정의는 본 메소드의 매개변수의 이름이나 타입, 반환타입이 다르면 오류가 발생한다.
중복정의 - 같은 이름의 메소드에 매개변수는 다르게 사용한다.
같은 이름의 메소드의 매개변수를 다르게 줄 수 있다. -> 즉, 같은 이름의 함수를 중복해서 여러번 사용할 수 있다.
오버로딩이 불가능하면 위와 같이 쓸 수 없고,
sumInt, sumDouble, sumString 과 같이 이름이 다르게 메소드를 만들어줘야 한다.
그러나 오버로딩이 가능하기 때문에 파라미터의 타입이 다르면 서로 다른 메소드로 인식한다.
내일 배울 생명주기 미리 톺기
일반적인 뷰컨의 생명주기 순서
네비뷰컨이 push하고 pop하고 다시 push할 때 생명주기 순서
탭바뷰컨에서 해당 창을 열고 메뉴를 변경할 때 생명주기 순서
모달로 다른 화면을 띄우고 다시 돌아올 때 생명주기 순서
'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글
[iOS] Formatted API in iOS15 (0) | 2022.07.13 |
---|---|
[iOS] Copy items if needed, Move to Trash (0) | 2022.07.13 |
[iOS] 1주차에 새롭게 알게 된 것들 (0) | 2022.07.10 |
[iOS] UITextFieldDelegate, DidEndOnExit, isHidden (1) | 2022.07.08 |
[iOS] SF Symbols, iOS 계층구조, 상속 (0) | 2022.07.05 |