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
- Xcode
- ios
- 리펙터링
- 애니메이션
- uitableview
- tableView
- Clean Code
- UICollectionView
- ribs
- Human interface guide
- 스위프트
- Refactoring
- 리펙토링
- Observable
- MVVM
- UITextView
- swiftUI
- HIG
- map
- swift documentation
- uiscrollview
- clean architecture
- collectionview
- RxCocoa
- Protocol
- combine
- rxswift
- 리팩토링
- 클린 코드
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] UIScrollView 스크롤 구분 방법 (setContentOffset과 사용자가 스크롤한 상태 구분) 본문
UI 컴포넌트 (swift)
[iOS - swift] UIScrollView 스크롤 구분 방법 (setContentOffset과 사용자가 스크롤한 상태 구분)
jake-kim 2023. 6. 23. 00:40스크롤 구분 방법
- 스크롤을 정교하게 컨트롤하다보면 사용자가 드래그하여 스크롤이 시작되었는지, setContentOffset(_:animated:)로 스크롤을 지정했는지 구분이 필요
- ex) UIScrollView에서 스크롤 될 때마다 특정 처리를 하고싶은 경우 사용하는 didScroll 델리게이트에서 setContentOffset과 직접 드래그 했을때 구분하고 싶은 경우?
extension ViewController: UITableViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(scrollView.contentOffset)
label.text = "\(scrollView.contentOffset)"
}
}
- 사용자가 드래그한 것인지 코드(setContentOffset)으로 스크롤을 조절할 수 있는지 확인할 수 있는 방법?
- 전역 변수로 scrolledByUser라는 bool값을 선언
var scrolledByUser = false
- UIScrollViewDelegate에서 이 값을 제어
- scrollViewWillBeginDragging에서 user가 스크롤을 했다는 플래그를 true로 설정
- scrollViewDidEndDecelerating에서 user가 스크롤을 했다는 플래그를 false로 설정
extension ViewController: UITableViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let prefix = scrolledByUser ? "byUser, " : "byCode, "
print(scrolledByUser)
label.text = prefix + "\(scrollView.contentOffset)"
}
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
scrolledByUser = true
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrolledByUser = false
}
}
주의) scrollViewDidEndDragging가 아닌 scrollViewDidEndDecelerating에서 플래그값을 제어하는 이유는, scrollViewDidEndDragging 같은 경우 사용자가 손을 뗐을때 바로 호출되므로, 드래그로 스크롤을 시작하여 스크롤이 끝나기 까지 알기 위해서 scrollViewDidEndDecelerating에서 확인하는것
(완성)
'UI 컴포넌트 (swift)' 카테고리의 다른 글
Comments