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
- collectionview
- uitableview
- ios
- ribs
- map
- swift documentation
- 리팩토링
- 클린 코드
- MVVM
- rxswift
- Refactoring
- swiftUI
- tableView
- 스위프트
- SWIFT
- 리펙토링
- HIG
- UITextView
- RxCocoa
- Human interface guide
- Clean Code
- combine
- uiscrollview
- clean architecture
- Protocol
- 리펙터링
- Observable
- UICollectionView
- 애니메이션
- Xcode
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 트랜잭션으로 completion 구현 방법 (CATransaction, begin(), setCompletionBlock(), commit()) 본문
iOS 응용 (swift)
[iOS - swift] 트랜잭션으로 completion 구현 방법 (CATransaction, begin(), setCompletionBlock(), commit())
jake-kim 2023. 8. 9. 23:37
completion 구현 방법
- 특정 애니메이션이나 화면 전환이나, 특정 작업 후 completion 을 실행시키고 싶은 경우 보통의 API는 completion이 있지만 없을 때 CATransaction를 사용하면 completion 구현이 가능
- CATransaction은 렌더링에 관한 작업들을 그룹화하는 것
- 렌더링 트리를 그룹화 한다는 것
- 애니메이션이나, 화면전환이나 UI에 관한 업데이트들을 하나로 그룹화하는 것
- Core Animation에서 애니메이션과 관련된 여러 속성들을 하나로 묶어서 실행한다는 의미
CATransaction으로 completion 만드는 방법
- 1) CATransaction.begin()을 통해 새로운 트랜잭션을 시작 (= 현재 스레드에서 애니메이션과 관련된 여러 속성들을 하나로 묶는다는 의미)
- 2) CATransaction.setCompletionBlock(completion)을 사용하여 completion을 저장 (트랜잭션이 끝나면 completion을 실행한다는 의미)
- 3) 특정 애니메이션을 실행하는 코드를 넣은 후, CATransaction.commit()을 사용하여 트랜잭션 그룹을 닫는다는 의미
ex)
1) CATransaction.begin()을 통해 새로운 트랜잭션을 시작
2) CATransaction.setCompletionBlock(completion)을 사용하여 completion을 저장
3) 특정 애니메이션을 실행하는 코드를 넣은 후, CATransaction.commit()을 사용하여 트랜잭션 그룹을 닫음
@objc private func tap() {
run() {
print("test!")
}
}
private func run(completion: @escaping (() -> Void)) {
CATransaction.begin()
CATransaction.setCompletionBlock(completion)
UIView
.animate(
withDuration: 5,
animations: { self.view.backgroundColor = .yellow }
)
CATransaction.commit()
}
(완성)
* 전체 코드: https://github.com/JK0369/ExCATransactionCompletion
* 참고
https://developer.apple.com/documentation/quartzcore/catransaction/1448255-commit
https://developer.apple.com/documentation/quartzcore/catransaction/1448281-setcompletionblock
https://developer.apple.com/documentation/quartzcore/catransaction/1448282-begin
https://developer.apple.com/documentation/quartzcore/catransaction
'iOS 응용 (swift)' 카테고리의 다른 글
Comments