UIScrollView仅以编程方式滚动

时间:2014-03-24 10:50:43

标签: objective-c uiscrollview

我们需要制作一个滚动视图,只有当用户在屏幕上的某个区域滑动时才会滚动,这不在滚动视图中。

所以我创建了一个工作得很好的滚动视图,现在我正在努力找到一种方法来禁用滚动条内的滚动,并以某种方式读取用户在相关区域(某些条带视图)中滑动,然后发送滑动到滚动条,而不是以编程方式滚动:

[scrollView setContentOffset:CGPointMake(x, y) animated:YES];

这是实现这一目标的正确方法,还是有一些开箱即用的方式?

如何禁用滚动条内的滚动选项(没有禁用其中的触摸 - 因为他内部有一些tableView),而不仅仅是以编程方式滚动?

编辑 ::

我设置了

[self.scrollView setPagingEnabled:YES];
[self.scrollView setScrollEnabled:NO];

没有启用滚动。比在该视图中滑动时我试图用:

移动滚动条
  **[self.scrollView scrollRectToVisible:CGRectMake(scrollXPo+10, y, width, height) animated:YES];**

但是,它移动了10个像素,而不是它不再移动,这个星座中的寻呼也不起作用。

EDIT2

将其更改为:

self.scrollView.contentOffset.x+40

有效,但尚未分页..

我如何解决这些小事?

2 个答案:

答案 0 :(得分:1)

您可以将UIScrollView' s scrollEnabled设置为NO以禁用按触摸滚动,但仍保留滚动代码的可能性。然后,您可以使用setContentOffset:animated根据需要将视图滚动到相关的可见区域(相关区域中的swipine)。

正如UIScrollView's documentation所说:

  

确定是否启用滚动的布尔值。   如果此属性的值为YES,则启用滚动,如果为NO,则禁用滚动。默认值为YES。   滚动禁用时,滚动视图不接受触摸事件;它将它们转发给响应者链。

答案 1 :(得分:0)

您可以获取有关触摸事件的视图信息,因此只需触摸视图并检查触摸的视图是否为滚动视图/视图,然后不执行滚动

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if ([[touch view] isKindOfClass:[UIScrollView class]]) {
        //do not perform programmatically scrolling
    }
    else
   {
       //do your scrolling here
   }
}