2

私のアプリには、imageviewやボタンなどのオブジェクトを含むscrollviewがあり、scrollviewには膨大なコンテンツがあるため、垂直方向または水平方向にスクロールして探索する必要があります。私の質問は、オブジェクトが電話の画面の表示位置にあるかどうかを確認するにはどうすればよいですか?

編集:画像が完全にscrollViewのフレーム内にあるかどうかを検出したい。ただしCGRectIntersectsRect(bottomScroller.bounds, selectImage_1.frame)、小さな交差点がある場合でもtrueを返します。

4

2 に答える 2

4

オブジェクト(imageview、ボタンなど)のフレームをscrollView.bounds:と比較します。

if (CGRectIntersectsRect(scrollView.bounds, object.frame)) ...

編集:

オブジェクトが完全に表示されていることを確認する場合は、交差を計算して、オブジェクトのフレームと比較します。

CGRectEqualToRect(
      CGRectIntersection(scrollView.bounds, object.frame),
      object.frame);

ただし、そのチェックを行うための最適化された方法を見つけるかもしれません。

于 2012-09-03T14:43:11.313 に答える
2

他の回答で述べたように、CGRectIntersectsRectこれはオブジェクトがスクロールビューの表示フレームと交差している場合にのみ出力されるため、使用することをお勧めします。ただし、これをより完全にするために、スクロールが発生するたびに交差点を多かれ少なかれ要求できるUIScrollViewDelegate's方法を使用する必要があります。scrollViewDidScroll次に例を示します。

.h

<UIScrollViewDelegate>

.m

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (CGRectIntersectsRect(mySubView.frame, scrollView.bounds)) {
        CGRect intersection = CGRectIntersection(mySubView.frame, scrollView.bounds);
        NSLog(@"%@",NSStringFromCGRect(intersection));
    }
}

編集:次に、を使用CGRectIntersectsRectして特定の交差点を要求できます。この時点で、これをニーズに応じて作成するために必要なのは、のようなものを書くことだけですif(intersect.x > y)//do something

于 2012-09-03T14:52:20.280 に答える