흔히 많이 사용하는 TableView나 CollectionView 등에서 아래로 스크롤 시 새로고침 기능이 있다는 것을 잘 알고 계실겁니다. 이미 수 많은 앱에서 사용하고 있는 대표적인 기능 중 하나인데요. 사용 방법은 다음과 같습니다.
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 | private var refreshControl = UIRefreshControl() override func viewDidLoad() { super.viewDidLoad() loadServer() // 서버 데이터 로드 collectionView.refreshControl = refreshControl refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged) // Do any additional setup after loading the view. } @objc func refresh(){ // refresh Action clearAllViewData() // 모든 뷰 데이터를 삭제합니다. self.collectionView.reloadData() // Reload하여 뷰를 비워줍니다. } override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { if (refreshControl.isRefreshing) { self.refreshControl.endRefreshing() loadServer() } } | cs |
기본적으로 collectionView나 TableView에는 refreshControl
기능이 있습니다. 따라서 위와 같이 기본 뷰에 설정한 뒤, 메소드만 구현해주면 됩니다.
이 때, DispatchQueue
를 사용하고, scrollViewDidEndDragging
를 사용한 부분은 참고만 해주시면 됩니다. 저 같은 경우 collectionView를 비우고 reload할 때 뷰가 조금 버벅거리는 현상이 있었습니다. 이미 reload하는 과정에서 당겨진 스크롤이 뷰와 맞지 않아 그러는 듯 했는데, 저런 방식으로 해결할 수 있다는 글들을 좀 봐서 대충 적어놓은 부분입니다. 아직 미해결된 부분이네요. 아무래도 데이터를 먼저 불러오고, reload해야할듯한데, 그렇게되면 collectionView 기본 함수들에서 충돌이 발생하더라구요. 좀 더 고민을 해야되는 부분입니다.
'Developer > iOS, Swift' 카테고리의 다른 글
[Swift] 애플 아이디로 로그인 기능 구현하기 (1) | 2020.05.11 |
---|---|
[Swift] 서버에서 FCM 접근, iOS로 PUSH 푸시 보내기 (3) | 2020.02.27 |
[Swift] UIActivityIndicator 예제 (로딩중 표시 띄우기) (0) | 2020.02.25 |
[Swift] 갤러리에 저장된 이미지 파일, 서버에 POST하기 (1) | 2020.02.24 |
[Swift] 이미지 라이브러리, KingFisher와 AlamofireImage (0) | 2020.02.19 |
댓글