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?
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With