UICollectionView, UITableView는 프로젝트를 진행할 때 매우 많이 사용하고, 이 둘은 UIScrollView를 상속하고 있다. UIScrollView도 많이 사용해 보긴 했지만... 쓸 때마다 정확히 알아보지도 않고 사용해서 테이블 뷰의 페이징 기능을 구현해 보려고 할 때 좀 정확하게 알아야겠다 싶어서 알아보게 되었다. UIScrollView의 작동 방식 UIScrollView는 UIView와 크게 다르지 않다. frame이 있고, bounds가 있다. frame은 해당 뷰의 원점이 해당 뷰의 원점으로부터 얼만큼 떨어졌는지를 좌표계로 나타낸 것이고, bounds는 자기 자신의 원점을 기준으로 좌표계로 나타낸 것이다. 이때 부모뷰의 bounds의 원점을 변경 하면 자식뷰의 frame이..
iOS에서 화면에 보이는 모든 것들은 UIView를 서브클래싱 하고 있다. 이런 UIView의 생김새를 변경하거나 어떤 효과를 줄 때 layer를 통해 작업을 수행한다. cornerRadius, shdow, Animation 등 의 작업할 때 항상 layer가 등장한다. layer가 무엇이길래 UIView와 함께 자주 등장할까? UIView의 layer 공식문서에서는 렌더링에 사용되는 CoreAnimation의 layer (CALayer) 이고, view는 이 layer의 delegate라고 한다. UIView는 하나 이상의 layer를 가지고 있다고 한다. 렌더링은 무엇이고, CoreAnimation은 어떤 것이고, CALayer은 어떤 클래스이며 CALayerDelegate가 무엇이길래 UIView가..
코드로 버튼을 생성하고 cornerRadius를 적용해 둥글게 만드려고 했는데, 적용되지 않았던 이슈가 있었다. 내가 알고 있던 것은 cornerRadius가 적용 안 되는 이유는 레이아웃이 아직 완전히 잡히질 않아서인데 ViewDidAppear에서 버튼을 add 하고, cornerRadius 세팅하는 함수를 호출하고 있어서 레이아웃이 아직 잡히질 않았을 리가 없어서 의아해서 해결 방법을 찾아보니, 레이아웃이 모두 잡혔을 때에서 호출되는 viewDidLayoutSubviews()에 호출하니 정상적으로 적용 되었다. ViewDidAppear일 때도 레이아웃이 모두 잡혀있을 텐데 왜 적용이 안될까 라는 궁금증이 생겨, 뷰가 화면에 그려지는 과정에 대해 알아보았다. 뷰가 화면에 그려지는 과정은 크게 3가지로 ..