티스토리 뷰

반응형

 

 

 

ScrollView 

▶︎ UIScrollView

의 개발자 문서 개요내용을 학습차원에서 번역했습니다. 오역, 지적사항 댓글 환영합니다 ^-^

 

 


iOS ScrollView, 스크롤뷰 개발자문서 개요

 

 


UIScrollView

포함 된 뷰들의 축소/확대 및 스크롤링을 허용하는 뷰 클래스

 

 

UIScrollView는 UIView를 상속받습니다. 앱 개발 간 자주 사용되는 UITableView, UICollectionView 등의 UIKit 일부 클래스 들의 super클래스 이기도 합니다.

즉, UITableView, UICollectionView 사용 간 UIScrollView에서 사용하는 델리게이트 메서드도 동일하게 사용 가능합니다. 

 

 


OverView

스크롤뷰(UIScrollView)는 UITableView, UITextView 등의 UIKit 일부 클래스의 수퍼클래스입니다. 
스크롤뷰(UIScrollView)의 중점적 개념은 컨텐츠 뷰 위에서 객체가 조정가능한 뷰라는 것입니다.
스크롤뷰는 프레임 내에 컨텐츠를 담을 수 있는데 통상 어플리케이션의 메인 창과 일치
하다고 할 수 있습니다. 

스크롤뷰는 터치한 손가락의 움식임을 추적하고 그에 따라 컨텐츠 뷰 내 객체를 조정합니다. 스크롤뷰를 "벗어나" 컨텐츠 뷰 내에 보여지는 컨텐츠는 기존 origin값에 근거하여, 컨텐츠 뷰의 *offset을 기준하여 일부만을 보여줍니다. 

오프셋(offset)은 일반적으로 동일 오브젝트 안에서 오브젝트 처음부터 주어진 요소나 지점까지의 변위차를 나타내는 정수형이다.


스크롤뷰(ScrollView)는 그 자체적으로는 수직, 수평 스크롤 인디케이터를 제외한 별다른 요소가 존재하지 않습니다.

스크롤뷰는 스크롤링이 멈추었을때를 알기 위해 컨텐츠뷰의 크기를 알아야 합니다. 일반적으로 컨텐츠의 영역을 초과하는 스크롤링이 존재 했다면, 이는 "바운스(bounce)"를 하며 본래의 위치와 크기로 돌아갑니다.

 

 

스크롤뷰에 그려지는 컨텐츠를 관리하는 객체는 뷰가 스크린의 사이즈 밖을 초과하지 않도록 컨텐츠의 서브뷰를 타일링(tiling) 해야합니다. 유저가 스크롤뷰 내에서 스크롤 할때, 필요에따라 객체는 추가 혹은 제거될 수 있어야 합니다.

 

 

스크롤뷰는 스크롤바를 갖고 있지 않기 때문에 스크롤을 위한 의도인지, 컨텐츠뷰의 서브뷰를 찾으려는 것인지에 대한 터치 시그널(신호) 를 할 수 있어야 합니다.

그 의도를 알기 위해 스크롤뷰는 유저가 터치를 했을 때 일시적으로 타이머를 실행하며 터치다운(touch-down) 이벤트를 가로챕니다.

타이머가 실행 된 뒤, 터치한 손가락이 어떤 동작을 취하는지를 지켜보게 됩니다.

1) 만약 그 뒤 어떠한 특별한 위치변경이 없었다면? 스크롤뷰는 컨텐츠 뷰 내 터치된 서브뷰로 트랙킹이벤트를 전달합니다. 
2) 만약 타이머 실행 간 유저가 충분한 손가락 드래그를 실행했다면? 스크롤뷰는 컨텐츠 뷰 내 서브뷰에 대한 트랙킹을 그만하고 스크롤뷰 자기자신의 스크롤링을 수행합니다. 

서브 클래스들은 아래와 같은 스크롤뷰에 의해 호출되는 메서드들을 오버라이딩 하여 쓸 수 있습니다. 이를 통해 스크롤뷰가 스크롤링 제스쳐 동작을 어떻게 할지 설정할 수 있습니다.

touchesShouldBegin(_:with:in:) 서브클래스로 터치이벤트로 전달될 지 유무를 설정가능
∙ -isPagingEnabled
∙ -touchesShouldCancel(in:) 서브클래스의 터치이벤트를 취소하고 드래그를 시작할지 유무를 설정가능

 

 

스크롤뷰(scrollView)는 또한 컨텐츠를 확대하고 드래그하는 것도  다룹니다. 유저가 *핀치(pinch-in, pinch-out) 동작을 수행할 때, 스크롤뷰는 컨텐츠의 크기와 오프셋 등을 조절합니다.

만약 동작이 끝났다면, 컨텐츠뷰를 관리하는 객체는 필요에 따라 컨텐츠 내의 서브뷰들을 업데이트 해주어야 합니다.(핀치 제스쳐가 끝나더라도 터치는 진행중임을 알아야 합니다.) 해당 제스쳐가 진행중인 동안, 스크롤뷰는 서브뷰에 어떠한 트랙킹 이벤트도 보내지 않습니다.

패닝(panning)은 터치를 한 상태에서 떼지않고 드래그하는 동작을 의미합니다.
핀치(pinch)는 확대/축소를 위해 두개의 손가락으로 드래그 하는 동작을 의미합니다. 

 

 

 

UIScrollView 클래스는 반드시 채택해야 하는 델리게이트 프로토콜, UIScrollViewDelegate를 갖고 있습니다.

패닝, 줌(확대,축소) 동작 등을 수행하는 동안, 델리게이트는 viewForZooming(in:), scrollViewDidEndZooming(_:with:atScale:)을 적용해야만 합니다. 
추가로, 최대 줌 크기(maximumZoomScale), 최소 줌 크기(minimumZoomScale)는 반드시 달라야만 합니다.

 

 


상태 보존

만약 뷰의 restorationIdentifier(복구 식별자) 프로퍼티 값을 할당하면, 앱 런칭 간 스크롤 관련 정보를 보존할 할 수 있습니다. 구체적으로, zoomScale, contentInset, contentOffset 등의 프로퍼티 값이 보존됩니다. 이를 복원하는 동안, 이전과 동일하게 컨텐츠가 나타나고 스크롤 될 수 있도록 앞서 얘기한 프로퍼티 값을 복구하게 됩니다. 

만약 보존과 복구 작업에 대한 더 자세한 정보가 궁금하시다면, iOS 앱 프로그래밍 가이드 App Programming Guide For iOS를 참고하십시오.

 

 

▼UIScrollView 개발자 문서 원본 링크

 

UIScrollView - UIKit | Apple Developer Documentation

The methods declared by the UIScrollViewDelegate protocol allow the adopting delegate to respond to messages from the UIScrollView class and thus respond to, and in some affect, operations such as scrolling, zooming, deceleration of scrolled content, and s

developer.apple.com

 

 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함