0

コードを実行するには、scrollViewが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

_scrollViewが参照する変数ではなく、senderパラメーターを使用します(正しく接続されていない可能性があります)

また、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(またはそれ以下)の場合、それが常に表示される理由を説明します。スクロールビューの幅が320であるとすると、contentSize.widthを640に設定すると、右側までスクロールすると(コンテンツを左にドラッグすると)、contentOffset.x320になります。残り。

+--------------+ <- 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 に答える