2012-12-27 3 views
3

나는 오버레이가 UITableview 위의 UIView입니다. UITableview을 스크롤 할 때, UIView이 페이스 북 앱의 최상위 메뉴와 마찬가지로 UITableview 스크롤과 동일한 속도로 이동하기를 원합니다.UITableView 스크롤 오버레이보기 스크롤

enter image description here

어떤 제안이? 나는 jQuery과의 스크롤처럼 delegate.something에 오버레이하여 UIView의 프레임을 변경하려고 :

- (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

일부 코드를 표시하십시오. –

+0

나는 내 길을 몇 가지 코드를 추가 @ H2CO3 – keywind

+0

고마워. 단지 호기심 :'self.lastOffsetOfY'가 뷰를 표시하기 전에 초기화 되었습니까? 또한이 메서드를 방해 할 수있는 스크롤 뷰가 있습니까? 'if ([scrollView isEqual : tableView])'와 같은 체크를하면? –

답변

2

UIView를 항상 화면 위쪽에 고정하려면 tableview와 관계없이 UIView를 tableview에 추가하는 대신 컨트롤러보기에 추가하면됩니다. 당신이 오버레이를 달성하려는 경우

VIEW 
    UITableView 
     UIView 
+0

우리가 UITableViewController –

+0

옙을 사용할 때 작동하지 않습니다 .. 그것은 tableviewcontroller에 있었고 저는 [self addSubview]를하고있었습니다. 그래서 내 오버레이 tableviewcontroller의 자식이었다. – dancl

1

: 당신이 하나를 사용하는 경우 XIB에서

, 대신 당신은 아마 무슨의

VIEW 
    UITableView 
    UIView 

같은 것을해야한다 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 맨 위에 존재한다는 착각을 불러 일으 킵니다. 페이스 북과 같이보기를 닫으려면 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]; 
}