iOS/Developer Documentation

UIScrollView / UIScrollViewDelegate 정리

Joo-Topia 2023. 2. 25. 03:53

UIScrollView

UIScrollView는 iOS에서 화면의 표시 영역보다 큰 콘텐츠를 스크롤하여 볼 수 있게 해주는 뷰입니다. UIScrollView는 UIView의 하위 클래스이며, 수직 또는 수평으로 콘텐츠를 스크롤하고 콘텐츠를 확대하거나 축소하는 인터페이스를 제공합니다.

UIScrollView의 중요 프로퍼티

contentOffset: 이 속성은 현재 보이는 콘텐츠의 위치를 스크롤 뷰의 원점에 상대적으로 지정합니다. 이것은 콘텐츠의 x와 y 오프셋을 나타내는 CGPoint 값입니다. 이 속성을 사용하여 콘텐츠를 프로그래밍 방식으로 스크롤하거나 동적 효과를 위해 다른 뷰에 바인딩할 수 있습니다.

contentSize: 이 속성은 스크롤 뷰 내에서 스크롤 가능한 콘텐츠 영역의 크기를 지정합니다. 이것은 가로 및 세로 크기를 나타내는 CGSize 값이며, 스크롤 뷰의 표시 영역보다 큰 콘텐츠의 크기를 기반으로 설정해야 합니다.

delegate: 이 속성은 스크롤 뷰의 델리게이트 객체를 지정합니다. 델리게이트 객체는 스크롤링, 확대 및 드래그와 같은 이벤트에 응답하고 이러한 이벤트에 대한 사용자 지정 작업을 수행할 수 있습니다.

isPagingEnabled: 이 속성은 스크롤 뷰에 페이징이 활성화되는지 여부를 지정합니다. true로 설정하면 스크롤 뷰는 페이지로 스냅되며, 각 페이지는 스크롤 뷰의 표시 영역과 같은 크기입니다.

maximumZoomScaleminimumZoomScale: 이러한 속성은 콘텐츠를 확대하거나 축소하는 최대 및 최소 배율 값을 지정합니다. 이러한 속성을 설정하면 사용자가 스크롤 뷰 내에서 콘텐츠를 확대하거나 축소할 수 있습니다

isScrollEnabled: 이 속성은 스크롤 뷰에서 스크롤링이 활성화되는지 여부를 지정합니다. false로 설정하면 사용자는 콘텐츠를 스크롤할 수 없지만 프로그래밍 방식으로 여전히 contentOffset을 변경할 수 있습니다.

UIScrollView는 콘텐츠를 표시하고 스크롤링하는 데 많은 기능을 제공하는 강력하고 유연한 뷰입니다. 위에서 언급한 속성들은 중요한 몇 가지 속성 중 일부일 뿐이며, 스크롤 뷰의 동작을 사용자 지정하는 데 사용할 수 있는 많은 다른 속성과 메소드들이 있습니다.

UIScrollViewDelegate

UIScrollViewDelegate는 Apple의 iOS 및 macOS에서 제공하는 UIKit 프레임워크의 프로토콜로, UIScrollView 내에서 특정 작업 또는 이벤트가 발생할 때 호출할 수 있는 메소드를 정의합니다. UIScrollViewDelegate 프로토콜을 채택함으로써 개발자는 콘텐츠 오프셋, 스크롤 속도 및 확대/축소 비율과 같은 스크롤링 동작의 다양한 측면에 대해 응답하고 사용자 정의할 수 있습니다. UIScrollViewDelegate를 채택함으로써 개발자는 UIScrollView에서 제공하는 기본 스크롤링 동작을 확장하거나 대체할 수 있는 사용자 지정 동작을 구현할 수 있습니다.

UIScrollViewDelegate가 제공하는 함수:

스크롤 관리

scrollViewDidScroll(_:)
이 메서드는 사용자가 콘텐츠를 스크롤할 때마다 호출됩니다. 현재 스크롤 위치를 CGPoint로 제공하며, 다른 부분의 사용자 인터페이스를 업데이트하여 배경 이미지 위치를 업데이트하거나 내비게이션 바의 모양을 변경하는 등 현재 스크롤 위치에 응답할 수 있습니다.

scrollViewWillBeginDragging(_:)
이 메서드는 사용자가 스크롤 뷰를 드래그하기 시작할 때 호출됩니다. 사용자가 스크롤하는 동안 실행 중인 애니메이션이나 작업을 일시 중지하여 성능을 향상시키는 데 사용할 수 있습니다.

scrollViewDidEndDragging(_:willDecelerate:)
이 메서드는 사용자가 스크롤 뷰에서 손가락을 떼면 호출됩니다. 두 번째 매개변수는 스크롤링 이동이 감속되어 계속 진행되거나 즉시 정지될 것인지를 나타내는 불리언 값입니다. 사용자가 스크롤링을 멈출 때 발생해야 하는 모든 작업, 예를 들어 새 데이터를 로드하거나 콘텐츠를 새로 고침하는 등의 작업을 수행하는 데 사용할 수 있습니다.

줌 관리

viewForZooming(in:)
이 메서드는 사용자가 핀치 제스처를 수행할 때 줌인 또는 줌아웃될 뷰를 반환합니다. 뷰는 스크롤 뷰의 서브뷰여야 합니다.

scrollViewWillBeginZooming(_:with:)
이 메서드는 사용자가 콘텐츠를 확대/축소하기 시작할 때 호출됩니다. 사용자가 확대/축소하는 동안 실행 중인 애니메이션이나 작업을 일시 중지하여 성능을 향상시키는 데 사용할 수 있습니다.

scrollViewDidEndZooming(_:with:atScale:)
이 메서드는 줌 애니메이션이 멈출 때 호출됩니다. 줌이 끝난 후 최종 정리나 애니메이션 작업을 수행하는 데 사용할 수 있습니다.

스크롤링 애니메이션 관리

scrollViewWillEndDragging(_:withVelocity:targetContentOffset:) 이 메소드는 사용자가 스크롤 뷰에서 손가락을 뗀 후 스크롤링 움직임이 감속되는 경우 호출됩니다. 이 메소드는 스크롤링 움직임의 속도와 스크롤 뷰가 정지할 목표 컨텐츠 오프셋을 제공합니다. 이를 이용하여 스크롤링 애니메이션 종료 전에 목표 컨텐츠 오프셋이나 스크롤링 속도를 조정할 수 있습니다.

scrollViewDidEndDecelerating(_:) 이 메소드는 스크롤링 애니메이션이 끝나면 호출됩니다. 이 메소드는 스크롤링이 끝난 후에 수행해야 할 최종 정리 작업이나 애니메이션 작업을 수행하는 데 사용될 수 있습니다.

UIScrollViewDelegate의 메소드를 구현함으로써, 개발자는 UIScrollView의 동작을 사용자 정의하고 확장하여 독특하고 매력적인 사용자 인터페이스를 만들 수 있습니다.