2011-04-19 9 views
4

사용자가 화면 위쪽, 화면 가운데 또는 화면 아래쪽을 스 와이프할지 여부에 따라 다른 이벤트를 트리거해야합니다. UISwipeGestureRecognizer에서 위치를 얻는 방법이 없다는 것을 확신하므로이 작업을 수행하는 가장 쉽고/쉬운 방법을 찾으려고합니다.UISwipeGestureRecognizer 위치

첫 번째 옵션은 '터치'방법을 사용하여 내 슬쩍 인식기를 만드는 것입니다. 이것은 매우 어려울 것 같습니다 (예를 들어, 스 와이프와 드래그를 구별하려고합니다).

두 번째 방법은 'touches'메소드 중 하나 (예 : touchesBegan)에서 위치를 가져 와서 여하튼 슬쩍과 연관시키는 것입니다. 아마도 touchesBegan에 타이머를 설정 한 다음 스 와이프 인식기가 0.5 초 이내에 실행되면 스 와이프가 해당 터치에 연결되었음을 알 수 있습니다.

내가 생각할 수있는 세 번째 가능성은 내 뷰 위에 3 개의 투명한 하위 뷰를 놓고 각보기에 다른 스 와이프 인식기를 추가하는 것입니다. 투명보기가 터치/스 와이프 이벤트를 인식하지 않는다는 점을 제외하고는 가장 좋은 방법입니다. 어떻게이 문제를 해결할 수 있습니까?

제안 사항? 감사.

답변

12

아마도 UISwipeGestureRecognizer의 locationOfTouch 메서드를 사용할 수 있습니다.

CGPoint pt = [recognizer locationOfTouch:0 inView:view]; 

나는 이것이 제스처를 시작한 터치의 원래 x, y 좌표를 줄 것이라고 믿습니다.

+1

뜨아. 좋아, 나는 바보 야. UIGestureRecognizer를보고있을 때 UISwipeGestureRecognizer 클래스 참조를보고있었습니다. 감사. – user617123

+0

출발점은'let swipeStartPoint = sender.location (in : view)'입니다. –

0

내 프로젝트에서 세 번째 기술을 사용했습니다. 투명한 뷰 DO는 스 와이프 제스처를 인식합니다. 여기 제가 사용했던 코드가 있습니다. 아마도 당신은 someting을 잊어 버릴 것입니다.

-(id) initWithPageList:(id<PageListDisplayerDelegate>) iDelegate { 
    self = [super init]; 
    if (self) { 
     // Custom initialization 
     self.delegate = iDelegate; 
     UISwipeGestureRecognizer* swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(viewSwiped:)]; 
     swipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft; 
     [self.view addGestureRecognizer:swipeRecognizer]; 
     [swipeRecognizer release]; 
    } 
    return self; 

}

-(void) viewSwiped:(UISwipeGestureRecognizer*) sender { 
    NSLog(@"View Swiped"); 
}