Disable diagonal drag in UIScrollview
I use UIScrollview to load my two types, say A and Bed and . It looks exactly like the picture below. I have set PagingEnabled to YES and DirectionLockEnabled to YES .
When I drag the view from A to B, it goes diagonally. Please find the code below,
- (void)setupScrollView:(UIScrollView*)scrMain {
for (int i = 0; i < 2; i++) {
if (i == 0) {
// View A
[ViewA setFrame:CGRectMake((i)*scrollview.frame.size.width + 20, 0, scrollview.frame.size.width - 40, ViewA.frame.size.height)];
[scrollview addSubview:ViewA];
} else if (i == 1) {
// View B
[ViewB setFrame:CGRectMake((i)*ViewB.frame.size.width + 30, 0, scrollview.frame.size.width - 40, ViewB.frame.size.height)];
[scrollview addSubview:ViewB];
}
}
[scrollview setContentSize:CGSizeMake((scrollview.frame.size.width-15)*2, ViewB.frame.size.height)];
}
- (void) scrollViewWillBeginDragging: (UIScrollView *) scrollView
{
self.oldContentOffset = scroller.contentOffset;
}
- (void) scrollViewDidScroll: (UIScrollView *) scrollView
{
float XOffset = fabs(self.oldContentOffset.x - scrollView.contentOffset.x );
float YOffset = fabs(self.oldContentOffset.y - scrollView.contentOffset.y );
if (scrollView.contentOffset.x != self.oldContentOffset.x && (XOffset >= YOffset) )
{
scrollView.pagingEnabled = YES;
scrollDirection = ScrollDirectionHorizontal;
}
else
{
scrollView.pagingEnabled = NO;
scrollDirection = ScrollDirectionVertical;
}
}
I check these links but haven't got a solution yet, http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html Scrolling the UIScrollView only one direction at a time http://chandanshetty01.blogspot.ae/ 2012/07 / restricting-diagonal-scrolling-in.html
All Help is welcome!
+1
source to share
1 answer
set directionalLockEnabled = YES;
after reset contentSize of scroll
[self.scrollView setContentSize:CGSizeMake((self.scrollView.frame.size.width-15)*2, self.ViewB.frame.size.height)];
self.scrollView.directionalLockEnabled = YES; // add this here.
By doing this, it will fix your problem.
Answer based on your code
- (void)viewDidLoad {
[super viewDidLoad];
[self setupScrollView:self.scrollView];
self.scrollView.directionalLockEnabled = YES;
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)setupScrollView:(UIScrollView*)scrMain {
for (int i = 0; i < 2; i++) {
if (i == 0) {
// View A
self.ViewA = [[UIView alloc] init];
self.ViewA.backgroundColor = [UIColor blackColor];
[self.ViewA setFrame:CGRectMake((i)*self.scrollView.frame.size.width + 20, 0, self.scrollView.frame.size.width - 40, 800)];
[self.scrollView addSubview:self.ViewA];
} else if (i == 1) {
// View B
self.ViewB = [[UIView alloc] init];
self.ViewB.backgroundColor = [UIColor blueColor];
[self.ViewB setFrame:CGRectMake((i)*self.ViewA.frame.size.width + 30, 0, self.scrollView.frame.size.width - 40, 800)];
[self.scrollView addSubview:self.ViewB];
}
}
[self.scrollView setContentSize:CGSizeMake((self.scrollView.frame.size.width-15)*2, self.ViewB.frame.size.height)];
self.scrollView.directionalLockEnabled = YES;
}
+1
source to share