2014-04-14 36 views
0

我有一個UIScrollView,它是水平視圖可滾動的。在這個視圖中,我添加了一些視圖作爲子視圖。如何檢測屏幕中間的哪個視圖,並由用戶選擇?檢測UIScrollView中的選定視圖

我想到類似didSelectRowAtIndexPath:的東西只是爲了滾動視圖。

感謝

+0

不,沒有。但是有一個委託方法'scrollViewDidScroll',和不同的'contentOffset'&'contentSize'屬性,你可以知道顯示的是什麼。 – Larme

+0

好吧,我明白了。你能告訴我如何檢測哪個視圖被選中? –

回答

0

可以查詢UIScrollViewcontentOffSet屬性,然後檢查在scrollViewCGPoint的看法。你可以參考這個link,它顯示瞭如何從CGPoint獲得UIView。

0

你能趕上這樣的觸摸(從UIScrollView子類):

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UITouch *touch in touches) { 
     CGPoint locationInScroll = [touch locationInView:scrollView]; 
     for (UIView *view in scrollView.subviews) { 
      if (CGRectContainsPoint(view.frame, locationInScroll)) { 
       // that's it 
       break; 
      } 
     } 
    } 
} 

或者你可以嘗試用類似的方式來使用UITapGestureRecognizer

+0

在'scrollViewDidEndDecelerating:scrollView:'方法中有沒有辦法做到這一點? –

+0

您可以通過'scrollView.contentOffset'來獲取左上角可見點和「scrollView.contentSize」的座標以獲得可見的大小。但你如何期望用戶「選擇」一個視圖而不點擊? – kpower

0

在touchesEnded或手勢識別器函數中,獲取滾動視圖中進行點擊的確切點。

CGPoint touchPoint=[gesture locationInView:scrollView]; 

然後除以與每個視圖的高度接觸點的y值與滾動視圖內得到確切的UIView

int point = (touchPoint.y)/heightOfSingleView; 

然後得到滾動視圖內該特定視圖如下:

UIView* view=[[locationInView:scrollView subviews] objectAtIndex:point]; 

確切的代碼應該是這樣的:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
CGPoint touchPoint=[gesture locationInView:scrollView]; 
int point = (touchPoint.y)/heightOfSingleView; 
UIView* view=[[locationInView:scrollView subviews] objectAtIndex:point]; 
}