2011-04-19 82 views
4

我需要觸發不同的事件,具體取決於用戶是否滑動屏幕的頂部,屏幕的中間或屏幕的底部。我試圖找出最好的/最簡單的方法來做到這一點,因爲我很確定沒有辦法從UISwipeGestureRecognizer獲取位置。UISwipeGestureRecognizer的位置

第一個選項是使用「觸摸」方法創建我自己的滑動識別器。這似乎是非常困難的(例如,試圖區分滑動和拖動)。

第二種可能性是從「觸摸」方法之一獲取位置(例如touchesBegan),並以某種方式將其與滑動相關聯。也許在touchesBegan中設置一個定時器,然後如果刷卡識別器在半秒鐘內觸發,我會知道該刷卡已連接到該觸摸。

我能想到的第三種可能性是在我的視圖之上放置3個透明子視圖,併爲每個視圖添加一個不同的滑動識別器。這對我來說似乎是最好的方式,但透明視圖不能識別觸摸/滑動事件。那麼我該如何解決這個問題?

有什麼建議嗎?謝謝。

回答

12

您可能可以使用UISwipeGestureRecognizer的locationOfTouch方法。

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

我相信這會給你啓動手勢的觸摸的原始x,y座標。

+1

咄。好吧,我是個白癡。我在查看UIGestureRecognizer時正在查看UISwipeGestureRecognizer類的引用。謝謝。 – user617123 2011-04-19 21:13:15

+0

對於起點,您可以簡單地讓'swipeStartPoint = sender.location(in:view)'。 – 2016-10-03 21:11:09

0

我在我的一個項目中使用了你的第三個技術。透明視圖可識別滑動手勢。這是我使用的代碼,也許你忘記了。

-(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"); 
}