2011-07-16 5 views
1

UIScrollViewにUIViewを1つ追加します。ユーザーがスクロールして現在のUIViewが長方形を渡すと、UIViewの背景色を変更する必要があります。 サブビューが定義された四角形の内側にあることを追跡する方法は?UIViewはUIScrollViewのサブビューです。サブビューが定義された四角形の内側にあることを追跡するには?

- (void) showViews { 

    CGRect scrollRect = CGRectMake(0.0f, 44.0f, 704.0f, 704.0f); 

    UIScrollView *aScroll = [[UIScrollView alloc] initWithFrame:scrollRect]; 
    float yPos = 20.0f; 
    //the rectangle to trace intersection 
    CGRect intersectRect = CGRectMake(0.0f, 200.0f, 704.0f, 400.0f); 

    for (UIView* view in arrayOfViews) { 
     CGRect viewRect = CGRectMake(100.0f, yPos, 320.0f, 480.0f); 
     view.frame = viewRect; 
     [aScroll addSubView:view]; 
     yPos = yPos + 340.0f; 
     aScroll.contentSize = CGSizeMake(704.0, yPos); 
    } 


} 
+1

申し訳ありませんが、あなたの質問は何ですか? – PengOne

+0

@PengOne申し訳ありませんが、質問はタイトルにあります。定義された四角形内のサブビューをどのようにトレースするのですか? – Michael

+0

スクロールが停止するときやスクロールするときに色を変更する必要がありますか? –

答えて

1

CGRectIntersection();は、あなたがのためにlooking何であるかをザ・かもしれません。

戻り値はCGRectです。交差点はNULLにすることができます(CGRectIsNull()で確認してください)。矩形のサイズが同じで、2番目の矩形が1つの場合、結果は同じサイズのCGRectになります。

+0

私は関数を知っていますが、UIScrollViewに相対的な位置に配置されているため、どのフレームを比較するのか分かりません。 – Michael

+0

はい私はあなたのコメント@PengOneを読んだ後にこの答えを出しました、これを処理できるスクロールビューの代理人ですか? –

+0

私はちょうどデリゲートメソッドを見て、私は正しいものを見つけることができません。単純なタスクが、まだアイデアは:) – Michael

0

私は、デリゲートメソッドとプロパティcontentOffsetで解決策を見つけました。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    for (UIView *view in [[scrollView subviews] copy]) { 

     if ((view.frame.origin.y - scrollView.contentOffset.y - self.controllStrip.frame.origin.y - self.controllStrip.frame.size.height) < 0 & 

      (view.frame.origin.y + view.frame.size.height - scrollView.contentOffset.y - self.controllStrip.frame.origin.y) > 0) { 

     view.backgroundColor = [UIColor grayColor]; 

     } 

     else 
      view.backgroundColor = [UIColor greenColor]; 

    } 

}