일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Large File Storage
- Dispatch.main.sync
- RxCocoa
- windowScene
- ios
- in-out
- swiftdocs
- App Signing
- Automatically manage signing
- Git Large File Storage
- Apple Certificate
- RxSwift
- conflicting access to memory
- Ribs
- Concurrent
- 잡초가득블로그
- iOS 버전 점유율
- 로버트마틴형
- memory safety
- SWIFT
- coordinateSpace
- Github file size
- 대머리깃허브
- rib
- 메모리 접근 충돌
- 클린아키텍쳐
- Dependency Rule
- RIBs Tutorial
- iOS Target
- UICoordinateSpace
- Today
- Total
빙수왕의 개발일지
UIView의 layer에 대하여 본문
UIView를 보면 layer 프로퍼티가 있다.
이건 CALayer의 객체인데, CALayer의 CA는 Core Animation의 약자이다.
* 여기서 잠깐:
우리가 뭐 쓸때 보면 CGColor, CALayer, UIView.... 이런것들이 있는데 여기서 CG CA 이런건 프레임워크의 이름에서 따온 약자이다. CG: Core Graphics -> CA: Core Animations -> UI: UIKit 순서대로 높은 등급이고, 이는 즉 사용하기 쉽다는 뜻이다. 예를들어, 우리가 고급언어라고 하면 사람이 이해하기 쉬운거, 저급언어라고 하면 컴퓨터가 이해하기 쉬운거.. (010101010....)이지 않는가??
이런거처럼 UIKit도 우리가 사용하기 쉬운 대신에,, 누군가 CA의 기능들 중에서 사람들이 자주쓰는걸 가공해서 만든거다보니 할수있는게 아무래도 저급 프레임워크에 비해 제한적이다.. 그래서 우리가 더 멋진효과!! 더 쩌는 애니메이션!!을 사용하기 위해서는 아무래도 CG레벨까지 건드려야 하는 경우가 생길 수 있을 것 같다.
다시 본론으로 돌아가서,
우린 이렇게 view의 layer에 접근해서 뭔가를 해주는.. 아래와같은 코드를 자주 쓴다.
cornerRadius를 주면 모서리가 둥글어지지..
그럼 왜 view.cornerRadius = 15와 같이 하지 않는것인가?
평소에는 view.backgroundColor = .blue와 같이 하지 않는가?
view.backgroundColor와 view.layer.backgroundColor은 뭐가 다른가..??
사실 같다.
찍어보면
아래처럼 어떤걸 바꿔도 둘다 똑같은 색으로 바뀜을 알 수 있다.
https://www.raywenderlich.com/10317653-calayer-tutorial-for-ios-getting-started
여기를 보면 이 이유가 잘 나와있다.
UIView는 사실 CALayer의 wrapper일 뿐이다. UIView는 많은 것을 처리하지만 사실 어떤 그림이나 애니메이션들은 직접 제어하지 않고, 내가 view에 어떤 일을 시키면 이 안의 layer객체에서 이 일을 직접 수행한다.
예를들어 위에서 호출한 backgroundColor 세팅도.. view의 backgroundColor을 세팅해주면 결국엔 layer의 background가 바뀌는 것이다.
'개발 > iOS' 카테고리의 다른 글
CleanSwift 프로젝트 생성해보기 (0) | 2021.02.10 |
---|---|
엔터프라이즈 빌드는 성공하는데 아카이빙에 실패할 때 (0) | 2021.02.10 |
protocol, enum의 property에 관해 (0) | 2020.12.03 |
갑자기 잘 보이던 imageView가 다른핸드폰에서 안보인다면? (0) | 2020.12.02 |
init에서 변수 값을 넣어줘도 didSet은 실행되지 않는다. (0) | 2020.11.29 |