https://developer.apple.com/documentation/uikit/uiscrollview
"A view that allows the scrolling and zooming of its contained views."
포함된 뷰의 스크롤링 및 확대, 축소를 허용하는 뷰입니다.
@MainActor class UIScrollView : UIView
UIScrollView
는 UITableView
, UITextView
를 포함한 여러 가지 UIKit
클래스의 슈퍼클래스입니다.
스크롤 뷰는 컨텐트 뷰에 대해 조정할 수 있는 원점을 가진 뷰입니다. 일반적으로(반드시 그렇지는 않은) 애플리케이션의 메인 윈도우의 프레임과 일치하는 프레임에 컨텐트를 겹치게 합니다. 스크롤 뷰는 손가락의 움직임을 추적하고, 그에 따라 우너점을 조정합니다. 스크롤 뷰를 통해 컨텐트를 보여주는 뷰는 컨텐트 뷰에서 offset에 고정된 새로운 원점에 따라 해당하는 부분을 그립니다. 스크롤 뷰 자체는 수직, 수평 스크롤 인디케이터 표시를 제외하고 직접 무엇인가를 그리지는 않습니다. 스크롤 뷰는 컨텐트 뷰의 크기를 알아야 하며, 이를 통해 언제 스크롤링이 멈춰야 하는지 알 수 있습니다. 기본값으로 컨텐트의 bounds를 초과해서 스크롤링될 때 뒤로 튕겨져 나옵니다.
스크롤 뷰에서 표시되는 컨텐트의 드로잉을 관리하는 객체는 컨텐트의 하위뷰를 타일링해야 합니다. 이는 스크린의 크기를 초과하는 뷰가 없도록 합니다. 사용자가 스크롤 뷰에서 스크롤할 때 이 객체는 필요에 따라 하위뷰를 추가 및 삭제합니다.
스크롤 뷰는 스크롤 바가 없기 때문에 터치 신호가 스크롤을 위한 의도인지 컨텐트에서 하위뷰를 추적하는 의도인지 알아야 합니다. 이를 파악하려면 일시적으로 타이머를 시작함으로써 터치 다운 이벤트를 가로채고, 타이머가 만료되기 전에 터치하고 있는 손가락이 움직이고 있는지를 확인합니다. 위치에서 의미를 갖는 변경사항 없이 타이머가 만료되면 스크롤 뷰는 컨텐트 뷰의 터치된 하위뷰에게 추적 이벤트를 보냅니다. 사용자가 타이머가 만료되기 전에 충분히 손가락으로 드래그하면 스크롤 뷰는 하위뷰에서 추적을 취소하고 스크롤링 자체를 수행합니다. 하위 클래스는 touchesShouldBegin(_:with:in:)
, isPagingEnabled
와 스크롤 뷰가 스크롤링 제스쳐를 어떻게 처리할지에 관여하는 touchesShouldCancel(in:)
, methods (which the scroll view calls)
메소드를 오버라이드할 수 있습니다.
스크롤 뷰는 컨텐트의 확대, 축소 및 패닝을 처리합니다. 사용자가 핀치 제스쳐를 사용할 때 스크롤 뷰는 컨텐트의 offset과 스케일을 조정합니다. 제스쳐가 끝나면 컨텐트 뷰를 관리하고 있는 객체는 필요한 경우에 따라 컨텐트의 하위뷰를 업데이트합니다. (제스쳐는 끝날 수 있고 손가락은 여전히 아래를 향할 수도 있다는 것을 알아두시기 바랍니다.) 제스쳐가 진행중인 동안 스크롤 뷰는 하위뷰에게 어떠한 추적 호출도 보내지 않습니다.
UIScrollView
클래스는 UIScrollViewDelegate
프로토콜을 채택해야 하는 딜리게이트를 가질 수 있습니다. 확대, 축소 및 패닝이 작동하려면 딜리게이트는 viewForZooming(in:)
과 scrollViewDidEndZooming(_:with:atScale:)
을 구현해야 합니다. 더불어 maximumZoomScale
과 minimumZoomScale
줌 스케일이 달라야 합니다.
이 뷰의 restorationIdentifier
속성에 값을 할당하면 이 뷰는 앱 launch 사이에 스크롤링 관련 정보를 보존합니다. 구체적으로 zoomScale
, contentInset
, contentOffset
속성의 값들이 보존됩니다. 복원이 이뤄지는 동안 스크롤 뷰는 컨텐트가 이전과 같은 위치로 스크롤된 컨텐트를 나타나게 하기 위해서 이 값들을 복원합니다. 상태 보존 및 복원 작업에 대한 더 많은 정보는 App Programming Guide for iOS를 보시기 바랍니다.
App Programming Guide for iOS
https://developer.apple.com/documentation/uikit#//apple_ref/doc/uid/TP40007072
설정 가능하고 고수준으로 커스터마이징 가능한 레이아웃을 사용해서 중첩된 뷰를 표시합니다.
https://developer.apple.com/documentation/uikit/views_and_controls/collection_views
https://velog.io/@panther222128/Collection-Views
커스터마이징 가능한 행들로 구성된 하나의 열에 데이터를 표시합니다.
https://developer.apple.com/documentation/uikit/views_and_controls/table_views
https://velog.io/@panther222128/Table-Views
열 혹은 행에 뷰의 컬렉션을 배치하기 위한 간단한 인터페이스입니다.
https://developer.apple.com/documentation/uikit/uistackview
https://velog.io/@panther222128/UIStackView