Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIScrollView scrolling in only one direction at a time

Tags:

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 horizontally, it won't move vertically at all until you let go and start moving it vertically. How could I go about doing this?

like image 920
Letrstotheprez Avatar asked Jun 12 '12 17:06

Letrstotheprez


2 Answers

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

like image 65
Scott Berrevoets Avatar answered Sep 18 '22 20:09

Scott Berrevoets


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

like image 38
Ash Avatar answered Sep 20 '22 20:09

Ash