UIScrollView scroll by offset

10,537

Solution 1

You can use the following method when your layout changes

func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    myScrollView.contentOffset.y += 80
}

Solution 2

No one answer correctly to the question, so I solved by my self as usually:

let viewHeight: CGFloat = 80.0

func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    startContentOffsetY = scrollView.contentOffset.y
}

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    targetContentOffsetY = targetContentOffset.memory.y
    if startContentOffsetY - targetContentOffsetY < 0 {
        scrollDirection = ScrollDirection.Bottom.rawValue
    } else {
        scrollDirection = ScrollDirection.Top.rawValue
    }
    let gap = targetContentOffsetY % viewHeight
    var offset: CGFloat = 0.0
    if (targetContentOffsetY - gap) % viewHeight == 0 {
        offset = -gap * scrollDirection
    } else {
        offset = gap * scrollDirection
    }
    let newTarget = targetContentOffsetY + (offset * scrollDirection)
    targetContentOffset.memory.y = newTarget
}

Solution 3

maybe something like this: (you need to add some validations) make a delegate class for your scroll view (UIScrollViewDelegate)

now add this function inside your UIScrollViewDelegate

myScrollView.delegate = instanceOfUIScrollViewDelegate;
func scrollViewDidScroll(scrollView: UIScrollView) {
    scrollView.contentOffset.y+=80;
}
Share:
10,537

Related videos on Youtube

Luca Davanzo
Author by

Luca Davanzo

I'm a software developer and I've worked mainly on interactive multimedia applications. Actually I'm an iOS developer. SOreadytohelp

Updated on September 14, 2022

Comments

  • Luca Davanzo
    Luca Davanzo over 1 year

    I've this situation:

    • one scrollView that fit all screen
    • N "cells" inside scrollView, each of them contains a label
    • each cell is 80px on height
    • fixed green mask (UIView)

    I programmatically create the cells (UIView) with label inside and correctly set contentSize of scrollView.

    I know that

    scrollView.setContentOffset(CGPoint(x: 0, y: 80.0), animated: true)
    

    move scroll view by 80.

    How can I "override" scroll view behaviour in order to always scroll by 80? What i want is sort of picker behaviour.. is this possible?

    enter image description here