2012-01-10 7 views
1

필자는 스크롤 가능한보기가 있으며 기본보기를 스크롤하지 않고 실행하는 제스처 인식기가 필요합니다.UIScrollView, PanGestureRecognizer 및 iOS 4

이 코드 사용했습니다 :

UISwipeGestureRecognizer *upRecognizer = 
    [[UISwipeGestureRecognizer alloc] initWithTarget:self 
               action:@selector(upSwipeHandle:)]; 
upRecognizer.direction = UISwipeGestureRecognizerDirectionUp; 
[upRecognizer setNumberOfTouchesRequired:2]; 
[controller.view addGestureRecognizer:upRecognizer]; 
[[controller.scrollView panGestureRecognizer] 
    requireGestureRecognizerToFail:upRecognizer]; 

을하지만 내가 아이폰 OS 4에서 같은 인식을 사용할 수있는 방법은 iOS 만 5에서 작동하는 것 같다?

+0

문제 해결 ... –

답변

2

나는 UIGestureRecognizer 대리자 메서드를 사용하여 내 문제를 해결합니다.

upRecognizer.delegate = self; 

을 추가하고이 방법 :

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 

    if ([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     return YES; 
    } 

    return NO; 
} 
0

내가 같은 문제 다 퉜다. 4.3 시뮬레이터에서 비슷한 코드를 실행했는데 scrollView.panGestureRecognizer는 iOS 5.0 이상에서만 사용할 수 있기 때문에 코드가 실패했습니다.

UIScrollView에 카테고리를 추가하여 해결했습니다.

@interface UIScrollView(panGestureRecognizer) 
@end 
@implementation UIScrollView(panGestureRecognizer) 
// iOS5 has a panGestureRecognizer property 
// Add a getter for iOS 4.3+ 
- (UIPanGestureRecognizer *)panGestureRecognizer 
{ 
    for (UIGestureRecognizer *gestureRecognizer in self.gestureRecognizers) 
    { 
     if ([gestureRecognizer isKindOfClass: [UIPanGestureRecognizer class]]) { 
      return (UIPanGestureRecognizer *)gestureRecognizer; 
     } 
    } 
    return nil; 
} 
@end