如何在特定点停止UIScrollView?

时间:2012-01-25 12:51:16

标签: objective-c ios xcode uiscrollview

如何在特定时刻停止UIScrollView?也就是说,在用户交互后设置UIScrollView的最终位置?

具体来说,如何设置水平UIScrollView的间隔,以便它只在这些点停止?

我希望我说的很清楚。

9 个答案:

答案 0 :(得分:33)

查看scrollViewWillEndDragging:withVelocity:targetContentOffset:的方法UIScrollViewDelegate。它旨在完全满足您的需求。

当用户完成拖动滚动视图时,滚动视图会将此消息发送给其委托。第三个参数(targetContentOffset)作为指针传递,您可以更改其值以更改滚动视图停止的位置。

iOS 5.0及更高版本。

答案 1 :(得分:11)

你有3个选择:

  1. 您可以使用pagingEnabled执行此操作。

  2. 使用UIScrollViewDelegate scrollViewDidEndDecelerating:方法中的setContentOffset: animated:

  3. 使用touchesBegantouchesMovedtouchesEnded创建您自己的滚动视图,并使用适当的端点进行推断以创建动力

答案 2 :(得分:4)

我找到了对我有用的东西。它让你滚动到0,0点,但没有进一步:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x <= -1) {
        [scrollView setScrollEnabled:NO];
        [self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
        [scrollView setScrollEnabled:YES];
    }
}

您可以对顶部,底部或右侧(x或y)执行相同操作

答案 3 :(得分:2)

对于那些我们需要在Swift中设置targetContentOffset rob mayoff 在上面的优秀答案中说,这就是:

func scrollViewWillEndDragging(scrollView: UIScrollView!, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    targetContentOffset.memory.y = x 
}

答案 4 :(得分:2)

这样可以正常工作:

    public Fragment getItem(int position) {
        return OneFragment.newInstance(position + 1);
    }

答案 5 :(得分:1)

要实现这一点,你需要启用scrollview的分页

例如:

[scrollView setContentSize:CGSizeMake(640, 161)];
[scrollView setPagingEnabled:YES];

这里,scrollview的宽度是640(iphone屏幕宽度的两倍),如果启用分页,它将根据宽度将其平均分配。因此,当我们滚动到这个位置时,它将停在特定的偏移处。

答案 6 :(得分:0)

[scrollView setContentSize:CGSizeMake(640, 161)];

答案 7 :(得分:0)

我认为这可以帮助您检查apple提供的此API

  • (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated

苹果清楚地说过这个这个方法滚动内容视图,以便rect定义的区域在滚动视图中可见。如果该区域已经可见,则该方法不执行任何操作。

答案 8 :(得分:0)

对于垂直滚动我使用它。工作得很好

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView {    self.scrollView.contentOffset = CGPointMake(0,desiredPoint.y); }