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 | 31 |
Tags
- MVVM
- Xcode
- 애니메이션
- UICollectionView
- uitableview
- ios
- 리펙토링
- clean architecture
- ribs
- map
- RxCocoa
- Protocol
- Refactoring
- rxswift
- combine
- Human interface guide
- 리펙터링
- collectionview
- UITextView
- tableView
- SWIFT
- Clean Code
- Observable
- 스위프트
- uiscrollview
- 클린 코드
- swift documentation
- swiftUI
- 리팩토링
- HIG
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] CALayer 성능 향상 방법 (shouldRasterize, rasterizeationScale, draw) 본문
iOS 응용 (swift)
[iOS - swift] CALayer 성능 향상 방법 (shouldRasterize, rasterizeationScale, draw)
jake-kim 2024. 2. 16. 01:34shouldRasterize 개념
- CALayer의 bool 프로퍼티
open class CALayer : NSObject, NSSecureCoding, CAMediaTiming {
open var shouldRasterize: Bool
}
- compositing전에 bitmap으로 만들고 이 bitmap을 활용하여 화면에 그림을 그릴지 여부 (default값은 false)
- *compositiong: 여러 개의 그래픽 요소를 하나의 이미지로 결합하는 프로세스를 의미
- shouldRasterize를 true로 하게되면 CALayer들을 픽셀로 판단하여 bitmap으로 변환하여 그림을 그림
- CALayer를 통해 매우 복잡한 그림을 그려야할때 true로 사용하는것이 유리 (CALayer에 의해서 다양한 그림을 그릴때 그 그림들을 일일이 그리는것보단 단순히 픽셀로 변환하는것이 더욱 간편하기 때문)
- 단, 뷰의 내용이 빈번하게 바뀌는 경우 bitmap도 계속 바뀌므로 잘 변경되지 않는 뷰에서만 true로 사용할 것
shouldRasterize를 true로 쓰는 예제
- CALayer를 통해 그림을 그리는 뷰 준비
- 단, shouldRasterize는 그림이 복잡한 뷰에서 사용하는것이 좋지만 예제 편의상 간단한 삼각형 형태의 그림을 그리는 코드로 준비
class CustomView: UIView {
override func draw(_ rect: CGRect) {
let trianglePath = UIBezierPath()
trianglePath.move(to: CGPoint(x: rect.midX, y: rect.minY))
trianglePath.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
trianglePath.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
trianglePath.close()
let fillColor = UIColor.red
fillColor.setFill()
trianglePath.fill()
}
}
- 사용하는쪽
- shouldRasterize를 true로 설정
- rasterizationScale도 역시 화면의 해상도 스케일을 설정하여 디바이스의 해상도 (2배, 3배) 고려하여 rasterization하도록 설정하면 완료
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let customView = CustomView(frame: CGRect(x: 50, y: 50, width: 200, height: 200))
customView.backgroundColor = UIColor.clear
view.addSubview(customView)
customView.layer.shouldRasterize = true
customView.layer.rasterizationScale = UIScreen.main.scale
}
}
* 전체 코드: https://github.com/JK0369/ExRasterize
* 참고
- https://developer.apple.com/documentation/uikit/uiimage/1624092-draw
- https://developer.apple.com/documentation/quartzcore/calayer/1410905-shouldrasterize
- https://ko.wikipedia.org/wiki/%EB%B9%84%ED%8A%B8%EB%A7%B5
'iOS 응용 (swift)' 카테고리의 다른 글
Comments