UIScrollView scrolling in only one direction at a time

前端 未结 4 1845
孤街浪徒
孤街浪徒 2020-12-31 02:47

I have a UIScrollView and I want it to be able to scroll in both directions (it currently does) but only one at a time. So, for instance, if you start scrolling it horizonta

相关标签:
4条回答
  • 2020-12-31 03:08

    the simple way to achieve this is set the directionalLockEnabled to YES and implement the UIScrollerView delegate like this

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        if (scrollView.contentOffset.x != 0 &&
            scrollView.contentOffset.y != 0) {
            scrollView.contentOffset = CGPointMake(0, 0);
        }
    }
    
    0 讨论(0)
  • 2020-12-31 03:12

    Set the directionalLockEnabled property to YES. From the Apple docs:

    If this property is NO, scrolling is permitted in both horizontal and vertical directions. If this property is YES and the user begins dragging in one general direction (horizontally or vertically), the scroll view disables scrolling in the other direction. If the drag direction is diagonal, then scrolling will not be locked and the user can drag in any direction until the drag completes. The default value is NO

    0 讨论(0)
  • 2020-12-31 03:12

    This worked for me based on @Joe xi answer. Swift 3.0

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
            scrollView.contentOffset = CGPoint(x: 0, y: 0)
        }
    }
    
    0 讨论(0)
  • 2020-12-31 03:18

    The accepted answer for this question is not entirely correct. According to the current documentation for directionalLockEnabled (as quoted in the original answer) :

    If the drag direction is diagonal, then scrolling will not be locked and the user can drag in any direction until the drag completes.

    I've found this to be the case myself. If the initial direction of dragging is closer to a 45-degree angle between x and y axes, directional locking fails. If you drag more-or-less horizontally or vertically, locking activates.

    For one way to accomplish true uni-axial locking, see this link: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html

    0 讨论(0)
提交回复
热议问题