일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c++
- 데이터처리
- 초보
- 알고리즘
- Python
- 코딩테스트
- 대학교재풀이
- 코딩
- 빅데이터입문
- 모두를위한 R데이터분석
- c프로그래밍
- 빅데이터
- 혼공C
- 도전실전예제
- 코틀린
- IT
- 코딩연습
- PrimePath
- 문제해결
- 모두를위한R데이터분석입문
- 혼자공부하는C언어
- 기술
- r
- Algorithm
- c언어문제풀이
- C언어
- 혼공씨
- 소수경로
- 연습문제
- 대학교재
- Today
- Total
Jupitor's Blog
[programming iOS 14] Views 본문
View
- view는 동적으로 조작할 수 있다. code로.
view의 크기를 조절하거나 애니메이션을 넣을 수 있다.
- view는 responder 이기도 하다.
- view 는 subview를 가질 수 있다.
- view는 nib 파일에서 가져올 수도 있다.
- window 와 이 것이 가지고 있는 interface 들을 이어주는 것은 window의 root view controller 이다.
- iOS13부터, 앱의 window는 window scene에 의해 관리된다. (UIViewScene)
iOS13 이전의 old architecture를 가진 앱을 iOS13 이후의 환경에 실행해도 여전히 old architecture를 가진다.
- 앱은 window를 속성으로 갖는 scene delegate를 가진다.
- new architecture app을 이전 환경에서 구동하게끔 해줄려면 3가지 일을 해야한다.
- app delegate는 window 속성을 통해 window를 retain, 즉 유지한다.
% 어떻게 앱이 launch 하는가 %
- 앱은 최종적으로 UIApplicationMain , 단 하나의 function을 부르는 single call 로 이루어져 있다.
- 이 function은 앱 구동에 필수적인 initial instance 들을 생성한다.
- 어떻게 UIApplicationMain이 작동하는지는 architecture에 달려있다.
[ iOS 13 이후의 최신 환경 ]
1. UIApplication의 instance 생성 하고 유지. -> UIApplication.shared
2. app delegate의 instance 생성 및 유지 -> app delegate의 인스턴스를 application의 인스턴스의 delegate에 assign.
3. UISceneSession , UIWindowScene, 그리고 window scene의 delegate역할을 할 인스턴스 생성.
4. 스토리보드의 initial view cotroller 인스턴스 생성.
5. UIWindow 인스턴스를 생성하고 window instance를 scene delegate의 window 속성에 assign.
6. 아까 instantiate한 view controller를 window 의 rootViewController로 설정.
7. app의 interface를 나타나게 함 (makeKeyAndVisible)
Storyboard를 안쓰는 경우 존재.
- window 를 참조하는 여러가지 방법 존재.
- [주의] 여기서 생성하고 처음보여지는 window가 app의 유일한 window가 아님을 잊지 말라.
- self.View -> view controller의 mainview 참조.
Subview and Superview
예전엔 불가능했지만 현재는 subview가 superview의 외부영역에 보여지는게 가능함.
subview가 아니여도 다른 뷰 앞에 나타날 수 있음.
- view hierarchy 가 갖는 특성
1. superview가 지워지면 subview가 지워짐
2. 투명도 상속
3. clipping
4. memory 관점 -> responsible for releasing a subview
5. superview의 크기가 달라질때 subview는 자동적으로 크기조정이 될 수 있음
code에서 view hierarchy를 확인하는 방법 존재, isDescendant(of:)
- view는 numeric tag를 가질 수 있음. -> viewWithTag(_:)로 상위에 view에 refer 될 수 있음?
- addSubView <-> removeFromSuperView
- SuperView에서 subView를 떼어 내고 재사용하고 싶으면 변수에 저장할 것.
- view hierarcy에 대한 변화를 감지하는 함수가 있음
-> “willRemoveSubview(_:), didAddSubview(_:)
willMove(toSuperview:), didMoveToSuperview
willMove(toWindow:), didMoveToWindow”
- addSubView -> 마지막에 추가. append. -> 가장 마지막에 나타남.
이걸 원하지 않을 경우, subView마다 index가 있음.
-> insertSubview(_:at:)
- subView 한번에 지울 순 없고, -> myView.subviews.forEach {$0.removeFromSuperview()}
Color
- background color가 dynamic 하면 iOS가 Darkmode일때 색이 변함
- UIColor를 dynamic하게 설정하는 방법.
- iOS에서 기본적으로 제공하는 dynamic Color도 있음.
- Color도 개인적으로 생성해서 사용가능
Visibility and Opacity
- isHidden, alpha, isOpaque
- alpha가 투명도
- isOpaque가 잘 이해가 안됨.
Frame
frame은 super view에 대한 coordinate system을 기준으로 한 rectangle의 두 꼭지점을 말한다.
e.g let v2 = UIView(frame:CGRect(41, 56, 132, 194))
Bounds and Center
- view는 실은 Frame을 절대적 위치로 사용하지 않고, center와 Bounds로만 위치를 설정한다.
왜냐하면 frame은 시시각각 바뀔 수 있지만 bounds 와 center는 transformation 등을 통해도 바뀌지 않기 때문.
frame은 parent view's coodinate system을 따르고, bounds 는 그 view의 coordinate system을 따른다.
let v2 = UIView(frame:v1.bounds.insetBy(dx: 10, dy: 10))
v2.bounds.size.height += 20
-> v2가 v1을 가림.
- superView의 Bounds를 재설정하면, subView의 위치도 바뀐다.
v1.bounds.origin.x += 10
v1.bounds.origin.y += 10
근데 이렇게 설정하면, subView가 오른쪽 아래가 아니라 왼쪽 위로 움직인다.
이게 이해가 안간다. 일단 그렇다고만 알고 있자.
그리고 신기하게 subview만 움직인다.
NewSubview.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds)); //Best
-> ????