0

几乎我需要检测滚动视图何时在 320 x 执行一些代码,但 contentOffset 似乎总是为 0。当我设置position==0代码执行但我需要它在 320 处执行。有什么想法吗?

(void)scrollViewDidEndDecelerating:(UIView *)sender
{
    int position = (_scrollView.contentOffset.x);
    if(position==320)
    {
    // Code Here
    }
}
4

2 回答 2

4

使用 sender 参数而不是 _scrollView 引用的任何变量(可能未正确连接)

另外,不要将 contentOffset.x 转换为 int,它实际上是 CGFloat

(void)scrollViewDidEndDecelerating:(UIScrollView *)sender
{
    if(sender.contentOffset.x==320)
    {
    // Code Here
    }
}
于 2012-06-11T23:51:13.900 回答
2

这是在滚动视图停止之后调用的(在减速和弹跳等之后),所以如果你的滚动视图是 320 宽并且它contentSize.width也是 320 (或者更小,我认为),那么这就解释了为什么它总是出现在 0 处停止。假设滚动视图宽度为 320,如果您将其设置contentSize.width为 640,那么当您一直滚动到右侧(将内容拖到左侧)contentOffset.x时,应该是 320休息。

+--------------+ <- Scroll View, 320 wide.
|              |
|+-------------------------------+ <- contentSize.width is 640
||                               |
||                               |
||                               |
|+-------------------------------+
|              |
+--------------+
 ^ contentOffset.x is 0

                  +--------------+ <- Scroll View, 320 wide.
                  |              |
+-------------------------------+| <- contentSize.width is 640
|                               ||
|                               ||
|                               ||
+-------------------------------+|
                  |              |
                  +--------------+
                  ^ contentOffset.x is 320

从上图中可以看出,内容偏移量是内容视图内部与滚动视图原点对齐的点。

于 2012-06-11T23:56:57.843 回答