如何在滚动时在UIScrollView中移动一个方向

use*_*431 3 objective-c uiscrollview ios

我是Objective-c的新手.我创建了UIScrollView对象并使用以下代码添加到我的视图中:

height = self.view.frame.size.height;
width = self.view.frame.size.width;

scrollbar = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
scrollbar.delegate = self;
scrollbar.backgroundColor = [UIColor whiteColor];
scrollbar.maximumZoomScale = 1.0;
scrollbar.minimumZoomScale = 1.0;
scrollbar.clipsToBounds = YES;
scrollbar.showsHorizontalScrollIndicator = YES;
scrollbar.pagingEnabled = YES;
[scrollbar setContentSize:CGSizeMake(width*4, height*4)];
[self.view addSubview:scrollbar];

for (int i = 1; i <= 4; i++) {
    first = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
    first.view.frame = CGRectMake((i-1)*width, 0, width, height*4);
    [scrollbar addSubview:first.view];

    switch (i) {
          ase 1:
              first.view.backgroundColor = [UIColor blueColor];
              break;
          case 2:
              first.view.backgroundColor = [UIColor redColor];
              break;
          case 3:
              first.view.backgroundColor = [UIColor greenColor];
              break;
          case 4:
              first.view.backgroundColor = [UIColor grayColor];
              break;
          default:
              break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我在我的ScrollView中添加了4个不同颜色的视图,我现在想要滚动我的ScrollView检测dx&dy(dx:Axis.x上的行驶距离和dy:Axis.y上的行驶距离)并检查这两个变量和什么时候 :

Notic:我希望当任何人触摸ScrollView并在Axis上移动触摸(x或y)或触摸Both Axis(x和y)时检查:

if(dx> dy)禁用水平滚动并在垂直方向移动!!! 否则在水平方向移动并禁用垂直滚动!

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    CGRect visibleRect = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.contentOffset.x + scrollView.bounds.size.width, scrollView.contentOffset.y + scrollView.bounds.size.height);

    NSLog(@"%f,%f",visibleRect.origin.x,visibleRect.origin.y);

    /*NSLog(@"x : %f",scrollView.contentOffset.x);
    NSLog(@"y : %f",scrollView.contentOffset.y);*/
    if (fabsf(scrollView.contentOffset.x) > fabsf(scrollView.contentOffset.y)) {
        NSLog(@"Vertical Side");
    }
    else {
        NSLog(@"Horizontal Side");
    }
}
Run Code Online (Sandbox Code Playgroud)

请指导我们.我不能禁用一方并移动另一侧!谢谢

小智 6

如果我理解你正确,你想要禁用用户拖动的方向滚动.如果是这样,UIScrollView已经提供了这样做的选项:

scrollView.directionalLockEnabled = YES;
Run Code Online (Sandbox Code Playgroud)

当此选项设置为true时,UIScrollView将自行处理正确的方向锁定.

有关更多信息,请查看文档:链接