Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- HIG
- combine
- 클린 코드
- collectionview
- ios
- UITextView
- ribs
- UICollectionView
- Human interface guide
- RxCocoa
- uiscrollview
- clean architecture
- Clean Code
- 애니메이션
- 리펙터링
- SWIFT
- swiftUI
- 리펙토링
- uitableview
- Refactoring
- swift documentation
- Protocol
- rxswift
- tableView
- 스위프트
- Xcode
- map
- 리팩토링
- Observable
- MVVM
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] CAGradientLayer, Gradation의 종류, axial, radial, conic (linear, circle, sweep) 본문
iOS 응용 (swift)
[iOS - swift] CAGradientLayer, Gradation의 종류, axial, radial, conic (linear, circle, sweep)
jake-kim 2022. 4. 7. 23:41
CAGradientLayer
- CALayer의 subclass이며, background 색상이나 layer의 색상을 gradient으로 만들 수 있는 인스턴스
- gradient 종류는 3가지가 존재
- axial (linear)
- radial (circle)
- conic (sweep)
- gradient를 사용할 때 핵심은 프로퍼티
- locations [NSNumber] 위치 값
- 예시) [0, 0.5, 1] - 0번까지 첫 번째 색, 0.5까지 두 번째 색, 1까지 세 번째 색
- startPoint, endPoint 값
- axial일때 - (0,0)은 좌측 상단, (1,1)은 우측 하단
- radial일때 - (0,0)은 원 내부 중심, (1,1)은 원 바깥 테두리
- conic일때 - (0,0)우측하단, (1,1)은 (0,0)에서 한바퀴 돌은 지점
- locations [NSNumber] 위치 값
axial gradient (linear)
- gradient.type = .axial로 설정
- startPoint, endPoint값
- (0,0)은 좌측 상단, (1,1)은 우측 하단
- gradient가 선형적으로 퍼지는 형태
- 3개의 색상의 location을 [0, 0.5, 1]로 설정 (0에서 초록색 마감, 0.5에서 파란색 마감, 1에서 노란색 마감)
- 수평으로 gradation이 퍼지게 하기 위해서 startPoint는 (0, 0.5), endPoint는 (1, 0.5)
private lazy var axialGradient: CAGradientLayer = {
let gradient = CAGradientLayer()
gradient.type = .axial // default
gradient.colors = [
UIColor.systemGreen.cgColor,
UIColor.systemBlue.cgColor,
UIColor.systemYellow.cgColor
]
gradient.locations = [0, 0.5, 1] // gradient stop 지점
// (0,0)이 좌측 상단, (1,1)이 우측 하단
gradient.startPoint = CGPoint(x: 0, y: 0.5)
gradient.endPoint = CGPoint(x: 1, y: 0.5)
return gradient
}()
private lazy var axialView: UIView = {
let view = UIView()
view.backgroundColor = .systemGray
view.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(view)
return view
}()
- gradient의 frame을 지정해준 후 뷰에 추가
override func viewDidLoad() {
super.viewDidLoad()
...
self.axialView.layer.addSublayer(self.axialGradient)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.axialGradient.frame = self.axialView.bounds
}
radial gradient (circle)
- gradient.type = .radial로 설정
- startPoint, endPoint값
- (0,0)은 원 내부 중심, (1,1)은 원 바깥 테두리
- gradient 설정
- 나머지 뷰에 추가하는 작업은 위와 동일
private lazy var radialGradient: CAGradientLayer = {
let gradient = CAGradientLayer()
gradient.type = .radial
gradient.colors = [
UIColor.systemGreen.cgColor,
UIColor.systemBlue.cgColor,
UIColor.systemYellow.cgColor
]
gradient.locations = [0, 0.5, 1]
// (0,0)이 원의 중심, (1,1)이 원의 테두리
gradient.startPoint = CGPoint(x: 0.5, y: 0.5)
gradient.endPoint = CGPoint(x: 1, y: 1)
return gradient
}()
conic gradient (sweep)
- gradient.type = .conic으로 설정
- startPoint, endPoint 값
- (0,0)우측하단, (1,1)은 (0,0)에서 한바퀴 돌은 지점
- gradient 인스턴스
private lazy var conicGradient: CAGradientLayer = {
let gradient = CAGradientLayer()
gradient.type = .conic
gradient.colors = [
UIColor.systemGreen.cgColor,
UIColor.systemBlue.cgColor,
UIColor.systemYellow.cgColor
]
gradient.locations = [0, 0.5, 1]
// startPoint: 원의 중심, endPoint: 첫 번째 색상과 마지막 색상이 결합되는 지점
// (0,0)우측하단, (1,1)은 (0,0)에서 한바퀴 돌은 지점
gradient.startPoint = CGPoint(x: 0.5, y: 0.5)
gradient.endPoint = CGPoint(x: 1, y: 1)
return gradient
}()
* 전체 코드: https://github.com/JK0369/ExGradient
* 참고
https://developer.apple.com/documentation/quartzcore/cagradientlayer
'iOS 응용 (swift)' 카테고리의 다른 글
Comments