2012-12-27 134 views
3

我有覆蓋UIView高於UITableview。當我滾動UITableview時,我想讓疊加層UIView以與UITableview滾動相同的速度移動,就像facebook應用的頂層菜單一樣。疊加視圖滾動爲UITableView滾動

enter image description here

有什麼建議嗎? 我試圖改變疊加的UIView的幀的UITableView的滾動delegate.something像:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 
    self.lastOffsetY = scrollView.contentOffset.y; 
} 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGFloat offset = self.lastOffsetOfY - scrollView.contentOffset.y; 
    CGRect frame = self.overlayview.frame; 
    frame.origin.y += offset; 
    self.overlayview.frame = frame; 
    self.lastOffsetOfY = scrollView.contentOffset.y; 
} 

只使用contentoffset值的變化。但疊加uiview不會像uitableview滾動一樣移動。

+0

顯示一些代碼。 – 2012-12-27 07:31:42

+0

我添加了一些我的方式代碼@ H2CO3 – keywind

+0

謝謝。只是好奇:在呈現視圖之前是否初始化了'self.lastOffsetOfY'?另外,有沒有滾動視圖可以干擾這種方法?如果你放入像if([scrollView isEqual:tableView])這樣的檢查,怎麼辦? – 2012-12-27 07:46:27

回答

2

如果您只是希望UIView始終堅持屏幕的頂部,獨立於tableview,您只需將UIView添加到控制器的視圖,而不是將其添加到tableview。

在你的廈門國際銀行,如果你使用一個,你應該有類似

VIEW 
    UITableView 
    UIView 

相反的是什麼,你可能有:

VIEW 
    UITableView 
     UIView 
+0

當我們使用UITableViewController –

+0

時,它不起作用..它在tableviewcontroller中,我在做[self addSubview],因此我的覆蓋是tableviewcontroller的孩子 – dancl

1

如果你要完成覆蓋類似於Facebook應用程序,將覆蓋圖添加到容納您的UITableView/ScollView的超級視圖將會更加高效。這樣你就不需要編寫一些需要在用戶每次滾動時執行的代碼。

//in your View Controller: 
UITableView *table = [[[UITableview alloc] init] autorelease]; 
CGRect frame = CGRectMake (tableOriginX, tableOriginY, width, height); 
UIView *overlay = [[[UIView alloc] initWithDesieredFrame: frame] autorelease]; 

這種方式視圖不會移動,但給總是存在於TableView頂部的錯覺。如果像Facebook一樣,你希望消除視圖,你可以使用TableView的內部手勢識別器來檢測一個可以消除或召喚覆蓋圖的輕彈(比如臉書)。

//Something like: 
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 
{ 
if (velocity.y > 0) 
{ 
    [self hideButtonPannelData]; 
} 
if (velocity.y < -0.8) 
{ 
    [self revealButtonPannelData]; 
}