18

tôi cần phát hiện hướng cử chỉ vuốt của tôi và tôi đã gặp sự cố với cử chỉ vuốt của tôi. cử chỉ đang hoạt động, nhưng tôi không biết cách phát hiện hướng. ...cách phát hiện hướng cử chỉ vuốt?

swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(detectSwipe:)]; 
[swipeGesture setNumberOfTouchesRequired:1]; 
[swipeGesture setDirection:UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp]; 
[appView addGestureRecognizer:swipeGesture]; 

-(void)detectSwipe:(UISwipeGestureRecognizer *)recognizer { 
switch (recognizer.direction) { 
    case UISwipeGestureRecognizerDirectionUp: 
     NSLog(@"smth1"); 
     break; 


    case UISwipeGestureRecognizerDirectionDown: 
     NSLog(@"smth2"); 
    default: 
     break; 
} 
} 

nó không làm việc:/

+0

Hãy xác định Liệu nhật ký có giá trị không chính xác? Nó không đăng nhập bất cứ điều gì? DetectSwipe không được gọi? – sosborn

+0

Trường hợp 'mặc định' được gọi khi tôi vuốt lên hoặc xuống. –

+0

Vì nó chỉ là một enum - bạn đã thử truyền và đăng nhập giá trị của trình nhận dạng: http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UISwipeGestureRecognizer_Class/Reference/Reference.html – bryanmac

Trả lời

20

Thuộc tính direction chỉ xác định phép chỉ đường được công nhận là swipes, không phải là hướng thực tế của một swipe cụ thể.

Cách dễ nhất là sử dụng hai trình nhận dạng cử chỉ riêng biệt thay thế. Bạn cũng có thể kiểm tra vị trí của cảm ứng khi cử chỉ bắt đầu và khi kết thúc bằng phương thức locationInView:.

+0

'CGPoint start = [swipeTìm kiếm vị tríInView: appView];' tôi sử dụng chức năng này và chức năng này cho tôi điểm bắt đầu vuốt, nhưng cách tôi phát hiện khi vuốt kết thúc? cách duy nhất là sử dụng 'touchesBegan' và' touchesEnded'? –

+1

Tôi không chắc chắn nếu điều này là thực sự có thể (bạn có lẽ tốt hơn với hai công nhận). Kiểm tra 'trạng thái' của trình nhận biết cử chỉ trong hành động của bạn. Đối với hầu hết các trình nhận dạng cử chỉ, nó chuyển từ 'UIGestureRecognizerStateBegan' thành' UIGestureRecognizerStateEnded', nhưng có thể là loại trình nhận dạng cử chỉ vuốt không làm điều đó, tôi chưa thử. Đã giải quyết – omz

+1

. tôi sử dụng 'touchesBegan' và' touchesEnded'. –

11

Mở rộng OMZ của giải pháp:

self.myView là quan điểm tôi muốn đặt nhận dạng cử chỉ trên. Mã dưới đây không được kiểm tra, tôi đoán sẽ tốt hơn nếu giữ các trình nhận dạng dưới dạng property và thêm chúng vào trong các tệp viewDidLoad() hoặc xib. selfUIViewController.

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedLeft:)]; 
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft ]; 
[self.view addGestureRecognizer:swipeLeft]; 

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedRight:)]; 
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight ]; 
[self.view addGestureRecognizer:swipeRight]; 

Thêm hai phương pháp để UIViewController của bạn và thêm hành động cần thiết:

- (IBAction)swipedRight:(UISwipeGestureRecognizer *)recognizer 
{ 
    NSLog(@"swiped right"); 
} 

- (IBAction)swipedLeft:(UISwipeGestureRecognizer *)recognizer 
{ 
    NSLog(@"swiped left"); 
} 
47

Dưới đây là một ví dụ từ một trong những dự án của tôi: "nó không làm việc"

// ... 

    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    [self.view addGestureRecognizer:swipeLeft]; 

    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    [self.view addGestureRecognizer:swipeRight]; 

    UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeUp.direction = UISwipeGestureRecognizerDirectionUp; 
    [self.view addGestureRecognizer:swipeUp]; 

    UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeDown.direction = UISwipeGestureRecognizerDirectionDown; 
    [self.view addGestureRecognizer:swipeDown]; 

    // ... 

- (void)didSwipe:(UISwipeGestureRecognizer*)swipe{ 

    if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) { 
     NSLog(@"Swipe Left"); 
    } else if (swipe.direction == UISwipeGestureRecognizerDirectionRight) { 
     NSLog(@"Swipe Right"); 
    } else if (swipe.direction == UISwipeGestureRecognizerDirectionUp) { 
     NSLog(@"Swipe Up"); 
    } else if (swipe.direction == UISwipeGestureRecognizerDirectionDown) { 
     NSLog(@"Swipe Down"); 
    } 
} 
+0

Nó làm việc cho tôi giải pháp hoàn hảo –

+0

Tôi nghĩ rằng bạn không cần phải thêm 4 cử chỉ nhận dạng, chỉ cần thêm một và trong phương pháp didSwipe kiểm tra hướng swipe của người gửi, mà nên làm điều đó –