[iOS] ScrollView

728x90

ScrollView 이벤트와 델리게이트에 대해 알아 보겠습니다.

 

ScrollView

화면의 크기보다 더 큰 콘텐츠의 크기를 가진 컨텐츠를 표현하기 위한 뷰 입니다.

스크롤 뷰의 크기와 콘텐츠의 크기

뷰의 크기는 프레임(frame)을 이용해서 뷰 자체의 크기를 얻어 올 수 있습니다. 스크롤 뷰의 경우에는 콘텐츠의 크기와 스크롤 뷰에 나타나는 위치 정보를 다뤄야합니다.

  • Content size : CGSize 구조체를 사용하고 콘텐츠의 크기를 설정

  • Content offset : CGPoint 구조체를 사용하고 콘텐츠가 스크롤 뷰에 표시되는 위치를 설정합니다. 곧 Bounds의 X좌표, Y좌표를 의미하는 것으로서 스크롤을 한다는 자체가 ContentOffset이 변하는 것입니다.

  • Content inset : UIDegeInsets 구조체로 스크롤 뷰에 표시되는 콘텐츠 뷰의 외부 여백의 크기를 위, 왼쪽, 아래, 오른쪽 순서로 설정.

 

ContentOffset과 ContentInset에 대해 더 궁금하다면  [iOS] ContentOffset과 ContentInset를 참고하세요

 

스크롤 기능

// 콘텐츠의 크기
var contentSize: CGSize

// 콘텐츠의 위치
var contentOffset: CGPoint

// 스크롤 뷰에 표시되는 콘텐츠 외부의 여백
var contentInset: UIEdgeInsets

// 스크롤 기능 활성화
var isScrollEnabled: Bool

// 콘텐츠 가장자리 경계에서 튕기며 돌아오는 속성 설정
var bounces: Bool

//원하는 Offset으로 이동한다.
func setContnetOffset(_ contentOffset: CGPoint, animate: Bool)

// 원하는 CGRect위치로 이동한다.
func scrollRectToVisible(_ rect: CGRect, animated: Bool)

 

스크롤 이벤트와 델리게이트

스크롤 동작은 사용자가 터치하고 끄는동작(Dragging)으로 시작한다. Dragging하는 속도에 맞춰서 스크롤되다가 손가락을 떼면 스크롤 속도가 줄어들면서(Decelerate) 스크롤 동작이 멈춥니다.

 

스크롤 동작에 관련된 UIScrollViewDelegate프로토콜에 정의된 메소드

// 스크롤 뷰를 끌기 시작
func scrollViewWillBeginDragging(_ scrollView: UIScrollView)

// 스크롤을 끝냈을때
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)

// 스크롤 뷰에서 스크롤 속도가 줄어드는 경우
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView)
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)

// 스크롤을 할 때마다
func scrollViewdidScroll(_ scrollView: UIScrollView)

 

스크롤 상태

사용자가 터치가 닿은 상태인지 끄는 동작인지 체크

// 터치가 닿아있는 중
var isTracking: Bool { get }

// 끄는 동작 중
var isDragging: Bool { get }

// 감속 중
var Decelerating: Bool { get }

 

상태바 터치시 최상위로 스크롤

// 가장 위쪽으로 스크롤 기능 사용 여부
var scrollsToTop: Bool

 

델리게이트

func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool

func scrollViewDidScrollToTop(_ scrollView: UIScrollView)

 

확대 / 축소

스크롤 뷰가 제공하는 콘텐츠 확대/축소 기능을 사용하려면 스크롤 뷰에 줌 비율을 설정해야합니다.

// 프로퍼티
var zoomScale: CGFloat
var minimumZoomScale: CGFloat
var maximumZoomScale: CGFloat

// 코드
func zoom(to rect: CGRect, animated: Bool)
func setZoomScale(_ scale: CGFloat, animated: Bool)

그리고 스크롤 뷰 델리게이트에서 viewForZoomingInScrollView 메소드를 이용해서 확대/축소를 하는 뷰를 제공해야합니다.

func viewForZooming(in scrollView: UIScrollView) -> UIView?
// 이런식으로 대상을 리턴시켜주면 확대/ 축소가 가능해집니다.
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView
}

또 확대 / 축소를 하면 스크롤 뷰는 델리게이트에게 다음의 메소드를 이용해서 확대/축소 동작에 대응할 수 있도록 해줍니다.

func scrollViewDidZoom(_ scrollView: UIScrollView)

'iOS' 카테고리의 다른 글

[iOS] 파일시스템(File System)  (0) 2019.07.25
[iOS] ContentOffset과 ContentInset  (0) 2019.07.25
[iOS] Photos Framework  (0) 2019.07.25
[iOS] iOS Realm이란?  (0) 2019.07.24
[iOS] UIDevice  (0) 2019.07.24