2012-03-14 114 views
6

我錯過了一些簡單的東西,請幫我理解一下。設置SwipeGestureRecognizer,需要說明

控制器建立

UIGestureRecognizer *swipe = [[UIGestureRecognizer alloc] 
      initWithTarget:gameView action:@selector(handleSwipeFrom:)]; 
[gameView addGestureRecognizer:swipe]; 

GameView設置

@interface GameView : UIView<UIGestureRecognizerDelegate> 

它還聲明

- (IBAction) handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer; 

並將其設置爲

- (IBAction)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer { 
    NSLog(@" .............. Swipe detected!! ..................."); 
} 

故事板鏈接UIGestureRecognizer這個IBACtion,並設置如下: enter image description here

我有點擔心,UIGestureRecognizer出現一個控制器的下方,而不是視圖,如圖所示,但我可以似乎無法糾正它。

enter image description here

當應用程序建立起來,揮筆,但無法識別。

請提出我在這裏想念的是什麼,以及我是否正確設置事情。

+0

你INITING一個UIGestureRecognizer而不是UISwipeGestureRecognizer的次爲一 – Brodie 2012-03-14 01:11:32

回答

16

您正在設置兩個單獨的手勢識別器。一個代碼可能什麼也不做,另一個代碼可能沒有目標。

在代碼中,你應該初始化輕掃手勢識別,像這樣:

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:gameView action:@selector(handleSwipeFrom:)]; 
// And assuming the "Up" direction in your screenshot is no accident 
swipe.direction = UISwipeGestureRecognizerDirectionUp; 

或者,當然了,你可以在故事板連接刷卡識別。這很容易通過右鍵單擊手勢識別器並將SentActions連接到handleSwipeFrom:方法來完成,或者類似地,您可以從右側的連接檢查器(如截圖所示)拖動到指定的函數。在圖像中,您可以看到我的Sent Actions已連接到方法swipeTarget:

enter image description here

但是目前你有兩個不完整的識別。

+0

優秀。非常感謝你NJones – JAM 2012-03-14 01:20:33

+2

沒問題。樂於幫助。 – NJones 2012-03-14 01:24:06

1
UISwipeGestureRecognizer *swipe = [[UISwipGestureRecognizer alloc] 
     initWithTarget:gameView action:@selector(handleSwipeFrom:)]; 
    [gameView addGestureRecognizer:swipe]; 


- (IBAction)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer { 
    NSLog(@" .............. Swipe detected!! ..................."); 
} 

然後撤消你在IB所做的事情。如果你在代碼中完成,然後做在IB過你只是重複工作,也許加倍刷卡的處理

11
-(void)addSwipeEvent:(UIView*)subView{ 

    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)]; 
    recognizer.numberOfTouchesRequired = 1; 
    recognizer.delegate = self; 
    [subView addGestureRecognizer:recognizer]; 
    [recognizer release]; 

    UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)]; 
    leftRecognizer.direction=UISwipeGestureRecognizerDirectionLeft; 
    leftRecognizer.numberOfTouchesRequired = 1; 
    leftRecognizer.delegate = self; 
    [subView addGestureRecognizer:leftRecognizer]; 
    [leftRecognizer release]; 

    UISwipeGestureRecognizer *downRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)]; 
    downRecognizer.direction=UISwipeGestureRecognizerDirectionDown; 
    downRecognizer.numberOfTouchesRequired = 1; 
    donwRecognizer.delegate = self; 
    [subView addGestureRecognizer:downRecognizer]; 
    [downRecognizer release]; 

    UISwipeGestureRecognizer *upRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)]; 
    upRecognizer.direction=UISwipeGestureRecognizerDirectionUp; 
    upRecognizer.numberOfTouchesRequired = 1; 
    upRecognizer.delegate = self; 
    [subView addGestureRecognizer:upRecognizer]; 
    [upRecognizer release]; 
} 

- (void) SwipeRecognizer:(UISwipeGestureRecognizer *)sender { 
    if (sender.direction == UISwipeGestureRecognizerDirectionLeft){ 
     NSLog(@" *** SWIPE LEFT ***"); 

    } 
    if (sender.direction == UISwipeGestureRecognizerDirectionRight){ 
     NSLog(@" *** SWIPE RIGHT ***"); 

    } 
    if (sender.direction== UISwipeGestureRecognizerDirectionUp){ 
     NSLog(@" *** SWIPE UP ***"); 

    } 
    if (sender.direction == UISwipeGestureRecognizerDirectionDown){ 
     NSLog(@" *** SWIPE DOWN ***"); 

    } 
} 


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([touch.view isKindOfClass:[UIView class]]) 
    { 
     return YES; 
    } 
    return NO; 
} 
+1

在.h文件中實現UIGestureRecognizerDelegate委託。 – Vibhooti 2012-03-14 06:30:31