2011-08-04 6 views
3

나는 사용자가 UIScrollView의 범위 바깥으로 스크롤 할 수있게 할 수 있는지 궁금하다.경계 외부에서 UIScrollView를 제어 하시겠습니까?

+0

난 당신이 무슨 뜻인지 이해가 안 :

더 많은 정보를 원하시면 다음과 같은 질문을 참조하십시오. –

+0

사용자는 일반적으로 그렇듯이 내 uiscrollview를 스크롤 할 수 있지만 uiscrollview 범위 밖으로 벗어나 끌 때 uiscrollview를 계속 스크롤합니다. – Andrew

+0

UIScrollView가 기본적으로 그렇게하지 않습니까? –

답변

6

수퍼 뷰의 다양한 UIView 메서드에서 스크롤 이벤트로 터치 이벤트를 전달하고 해당 이벤트가 작동하는지 확인할 수 있습니다. 예컨대 :

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [scrollView touchesBegan:touches withEvent:event]; 
} 
// etc 

또는 당신이 수퍼에 UIPanGestureRecognizer를 사용하여 시도하고 명시 적으로 팬 이벤트를받을 때 스크롤 뷰 오프셋을 설정할 수 있습니다. 예컨대 :

- (void)handlePan:(UIPanGestureRecognizer *)pan 
{ 
    scrollView.contentOffset = [pan translationInView:scrollView]; 
} 
// Or something like that. 
+0

때 "던져 스크롤 애니메이션 권리를 얻기 위해 힘든 일 수있다 "scrollview. 즉,'[pan velocityInView : pan.view]'가 0이 아닌 경우. – johnboiles

3

의 경계 외부 UIScrollView 및 최우선 hitTest:withEvent: 그래서 UIScrollView가 집어 들고 있다는 접촉을 서브 클래스보십시오. 이런 식으로 뭔가가 :

@interface MagicScrollView : UIScrollView 
@end 

@implementation MagicScrollView 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    // Intercept touches 100pt outside this view's bounds on all sides 
    if (CGRectContainsPoint(CGRectInset(self.bounds, -100, -100), point)) { 
     return self; 
    } 
    return nil; 
} 

@end 

당신은 또한 당신의 레이아웃에 따라 UIScrollView의 수퍼에 pointInside:withEvent:를 오버라이드 (override) 할 필요가 있습니다. interaction beyond bounds of uiview

관련 문제