티스토리 뷰
728x90
반응형
- 서버통신하는 동안 유저가 로딩되고 있음을 보여줄 수 있도록 activity indicator 를 제공하는 라이브러리를 사용해보자.
NVActivityIndicatorView
로딩 애니메이션을 제공하는 오픈 라이브러리
GitHub - ninjaprox/NVActivityIndicatorView: A collection of awesome loading animations
아래와 같은 로딩 애니메이션을 제공한다.
pod install
pod 'NVActivityIndicatorView'
initializer
시작하기
- 불투명한 배경을 가지는 activity indicator 만들기
import NVActivityIndicatorView
// lazy: 사용되기 전까지 연산되지 않는다. 로딩이 불필요한 경우에도 메모리를 잡아먹지 않는다.
lazy var loadingBgView: UIView = {
let bgView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
bgView.backgroundColor = .bottomDimmedBackground
return bgView
}()
lazy var activityIndicator: NVActivityIndicatorView = {
// ✅ activity indicator 설정
let activityIndicator = NVActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height: 40),
type: .ballBeat,
color: .mainColorNadaMain,
padding: .zero)
activityIndicator.translatesAutoresizingMaskIntoConstraints = false
return activityIndicator
}()
- 불투명 뷰 추가. 애니메이션 시작.
private func setActivityIndicator() {
// 불투명 뷰 추가
view.addSubview(loadingBgView)
// activity indicator 추가
loadingBgView.addSubview(activityIndicator)
NSLayoutConstraint.activate([
activityIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor),
activityIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
// 애니메이션 시작
activityIndicator.startAnimating()
}
- dispatch queue 에서 제공하는 main 큐는 serial 큐이기 때문에 직렬적으로 작업을 처리한다. 그래서
setActivityIndicator()
가 실행되고 aync 즉, 비동기적으로 작업이 마칠때까지 기다리지 않고 리턴하여 다음 작업을 main 큐에 넣게 되는 구조이다. 그리고 serial 큐이기 때문에 애니메이션이 시작되고 끝나는 순서가 보장된다.
DispatchQueue.main.async {
self.setActivityIndicator()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// 애니메이션 정지.
// 서버 통신 완료 후 다음의 메서드를 실행해서 통신의 끝나는 느낌을 줄 수 있다.
self.avtivityIndicator.stopAnimating()
self.loadingBgView.removeFromSuperview()
}
728x90
반응형
'iOS' 카테고리의 다른 글
iOS) 옵셔널 타입 Any 로 업캐스팅 (0) | 2022.01.26 |
---|---|
iOS) iOS 언어 설정 (0) | 2022.01.26 |
iOS) 무한스크롤 구현하기 (2) | 2022.01.01 |
iOS) iOS 15 + UIButton.ConfigurationUpdateHandler 으로 버튼 상태 핸들링하기 (0) | 2021.12.15 |
iOS) UITextField 글자 수 제한 구현하기 (2) | 2021.12.08 |
댓글
TAG
- github
- APNS
- Widget
- rxswift
- 서버통신
- RxCocoa
- watchOS
- MOYA
- Swift
- WWDC22
- Firebase
- configurable widget
- Notification
- SwiftUI
- WidgetKit
- OpenSourceLibrary
- containerBackground
- MVVM
- Protocol
- projectsetting
- WWDC
- urlsession
- Objective-C
- async/await
- CloneCoding
- 2022 KAKAO TECH INTERNSHIP
- Algorithm
- YPImagePicker
- IOS
- UserDefaults
최근에 올라온 글
최근에 달린 댓글
글 보관함
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
링크
- Total
- Today
- Yesterday