728x90
일반적으로 scrollView의 setContentOffset의 animation은 이런식으로 호출한다.
self.collectionView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
하지만 이 animation 시간을 조절하고 싶은 경우 2가지 방법을 생각해볼 수 있다.
1. UIView.animate활용
UIView.animate(withDuration: 5, delay: 0, options: [], animations: {
self.collectionView.setContentOffset(CGPoint(x: 0, y: 0), animated: false)
}, completion: nil)
위와 같이 UIView.animate를 써서 animated 필드를 false로 두거나, 혹은 contentOffset 필드의 값을 직접 지정하면 animation duration을 조절할 수 있다.
하지만 이 경우에는 scrollViewDidScroll(_:)메서드가 scroll상태에 따라서 연속적으로 호출되지 않고 contentOffSet의 값이 최종 상태로 변경되었을 때, 한 번만 호출이된다는 단점이 있다.
2. scrollView.setValue 메서드 사용
self.collectionView.setValue(5.0, forKeyPath: "contentOffsetAnimationDuration")
self.collectionView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
1번 방법의 단점을 완벽히 커버하는 방법이다. scrollView의 key path중 "contentOffsetAnimationDuration"의 value를 지정해주면 collectionView자체의 animation 시간이 변경되어서, scroll상태에 따라서 scrollViewDidScroll이 연속적으로 제대로 호출된다.
Objective-c에 의존적이라는 부분이 좀 걸리지만 현재로서는 가장 이상적인 방법이다.
참고로 setContentOffset(_:animated:)의 기본 duration은 0.3초이다.
728x90
'iOS > 설명' 카테고리의 다른 글
[iOS] Framework vs Library (0) | 2022.08.01 |
---|---|
[iOS] IBOutlet Collections (0) | 2022.08.01 |
[iOS] UIView LifeCycle 생명주기 (0) | 2022.07.18 |
[iOS] Public Beta vs Developer Beta (0) | 2022.07.17 |
[iOS] NSAttributedString에 image넣기 (0) | 2022.07.15 |
댓글