TIL(230303)

Youth·2023년 3월 3일
0

1. frame과 bounds의 차이점

우선 frame과 bounds에 관한 내용은 구글링을하면서 공부를 했고 두분의 블로그를 보고 공부했다
https://babbab2.tistory.com/44
https://zeddios.tistory.com/203

frame에 관해서 이야기를 해보면

둘다 CGRect로 선언이 되어있다

CGRect에 대해 간단하게 설명을 해보면 우선 CGRect는 CGPoint와 CGSize를 합해논거라고 생각하면되는데 CGPoint는 시작점의 xy좌표를 가지고 있고 CGSize는 width와 height를 가지고 있다. 즉, 시작점과 가로세로길이를 가지고있는게 CGRect라고 생각하면된다

frame먼저 간단히 보면 SuperView 좌표시스템 안에서 내 View의 위치와 크기를 이야기한다
여기서 SuperView는 바로 한단계 위의 View다

만약에 firstView 안에 secondView 안에 thirdView가 있다면 secondView는 firstView기준으로 frame이 설정되게 된다

즉 secondView의 orgin이 x,y라면 이건 firstView의 origin으로부터 x,y만큼 떨어져있다는 뜻이 된다

근데 문제는 bounds다 secondView의 bounds의 orgin을 바꾸면 thirdView의 위치가 변한다...

이게 대체 왜 그런건가를 보면 블로그에서는(소들소들님 블로그) viewport의 개념이라고 되어있다. 그니까 이게 무슨뜻이냐면 내부View들은 가만히 있고 내View의 관점에서 화면이 "그대로"이동한 개념이다

"즉 자기자신(그리고 superView)들은 가만히 있고 sub View들이 반대 좌표처럼 가는것처럼 보인다" 이지만 실제로는 View가 sub View를 바라보는 Viewport(시점)이 달라진것이다.

그리고 frame 과 bounds의 차이점중에 하나가 있다면 예를 들어서 하나의 뷰를 살짝 돌렸을때

이런 차이가 발생하게 된다 이게 무슨뜻이냐면 bounds기준으로는 origin과 width height가 그대로지만(돌아가도) frame기준으로는 회전한 모양을 감싸는 직사각형의 origin과 width height가 새로운 orgin, width, height가 된다.

이제 대충 frame과 bounds의 차이점에대해서 감이 왔고 그럼 언제 frame을사용하고 bounds를 사용해야하는가에 관해 이야기 해보면 frame은 말그대로 view의 위치와 크기를 바꾸고 설정하고 싶을때 사용하면된다 bounds는 첫번째로 view내부에 drawRect를 할때 사용한다 근데 이게 왜 그럴까 생각을 하면 당연히 superView의 좌표계 기준이 아니라 View만의 좌표계가 필요할테니까 그럴거라는걸 알 수 있고 가장중요한건 scroll할때 사용된다 scrollView가 bounds를 이용한것이라고 한다

기본적으로 scrollView는 내 화면보다 큰 View를 담고싶을때 사용하는 기능이다 이때 scroll하는 동작원리가 Bounds를 바꾸는것이다 그래서 bounds를 바꿔서 내 ScrollView안에 있는 subView어디를 보여줄지를 정하는거라고 보면 된다

우리가 scrollView를 설정할때 매번 사용하는 contentOffset이 bounds를 조절하는 변수였다.


2. preferredStatusBarStyle알아보기

오늘부터 udemy에 Uber 클론코딩을 보고 클론코딩을 하기 시작했다 하다보니까 여러가지 내가 몰랐던 부분이 있어서 정리해놓으려고 한다.


첫번째 뷰가 이렇게 로그인 하는 View인데 보다시피 View의 backgroundColor가 회색이다 그러다보니 스마트폰 화면에 시간이랑 와이파이랑 배터리 부분이 처음엔 기본이 검은색으로 되어있어서 잘 안보였다

사실 강의를 들으면서도 전혀 눈치채지 못했던 부분이었는데 이걸 바꿀수있는 함수가 있었고 이건 UIViewController에 이미 있는 함수를 override해서 값만 바꿔주면 된다

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

이런식으로 .lightContent를 return해주면 밝은색으로 변해서 이렇게 잘보이게 된다.
사실 이런부분하나가 유저에게 불편하지않는 경험을 줄수있는데 이런 디테일한 부분을 잘 구현해야겠다는 생각이 들었다.


3. textField의 attributedPlaceholder

textField에 placeholder를 넣을때 매번 그냥 textfield 객체에 .placeholder에다가 String값을 setting해줬는데

self.attributedPlaceholder = NSAttributedString(string: placeholder,
                                                attributes: [NSAttributedString.Key.foregroundColor : UIColor.lightGray])

이렇게하면 font나 foreground color도 바꿔서 넣어줄수 있다는걸 알게 되었다


4. Xcode 13이상에서 imageLiteral사용하는방법

이건 예전에 알고있던건데 image를 넣을때 #imageLiteral( 이렇게 치면 무슨 버튼이 하나생기고 그걸 더블클릭하면 image의 파일이름을 넣지 않고도 바로 이미지를 넣을 수 있다

profile
AppleDeveloperAcademy@POSTECH 1기 수료, SOPT 32기 iOS파트 수료

0개의 댓글