2014-11-18 6 views
0

키보드를 대체하는 사용자 정의보기가 있는데 사용자가 아래로 스크롤 할 때 화면을 벗어난 상태로 스크롤하려고합니다.scrollViewDidScroll이 호출되지 않았습니다. scrollViewDidEndDecelerating이 호출되었습니다.

원래의 scrollViewDelegate 메소드는 scrollViewDidEndDecelerating을 사용했기 때문에 사용자 스크롤과보기 애니메이션 사이에 지연이 있었지만 사용자가 스크롤을 시작한 후 약 1 초가 걸렸습니다.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    self.isUserScrolling = YES; 

    // Save to tell if scrolling up or down 
    initialContentOffset = scrollView.contentOffset.y; 
    previousContentDelta = 0.f; 
} 

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    self.isUserScrolling = NO; 

} 

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

    self.isUserScrolling = NO; 

    // If scrolled down 
    CGFloat prevDelta = previousContentDelta; 
    CGFloat delta = scrollView.contentOffset.y - initialContentOffset; 
    if (delta > 0.f && prevDelta <= 0.f) { 

    } else if (delta < 0.f && prevDelta >= 0.f) { 
     [self animateKeyBoardSpace:[self rectForKeyboardSpace:NO] curve:UIViewAnimationCurveEaseInOut duration:0.25]; 
    } 
    previousContentDelta = delta; 

} 

그래서 지금 scrollViewDidScroll에서 아래로 스크롤 확인과 같이이 animateKeyBoardSpace를 호출하는 것을 시도하고있다 :

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // ScrollDirection scrollDirection; 
    if (lastContentOffset > scrollView.contentOffset.y) { 
     [self animateKeyBoardSpace:[self rectForKeyboardSpace:NO] curve:UIViewAnimationCurveEaseInOut duration:0.25]; 
    } 
    else if (lastContentOffset < scrollView.contentOffset.y) { 

    } 

    lastContentOffset = scrollView.contentOffset.x; 
} 

그러나이 scrollViewDidScroll 심지어라고 점점되지 않습니다. 그것은 같은 tableViewController에 있고, 델리게이트가 설정되어 있고, 다른 델리게이트 메소드가 호출되고 있습니다.

답변

1

나는 수퍼 클래스에서 작업 중이었고 얼마 전부터 서브 클래스에 scrollViewDidScroll에 대한 스텁이있었습니다. 이것은 대표 호출을 캡처하고있었습니다.

방금 ​​하위 클래스 스텁을 삭제해야했습니다.