2012-12-27 138 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]; 
}