2014-10-27 85 views
0

我已經成功實現了UIScreenEdgePanGestureRecognizer,並且我的方法被觸發了,因爲它應該這樣做,但手勢識別器的「邊緣」屬性永久設置爲UIRectEdgeNone,儘管識別了正確的手勢邊緣設置爲UIRectEdgeBottom。UIScreenEdgePanGestureRecognizer邊緣屬性未按預期方式設置

下面是我設置的識別器:

- (void)setupEdgeRecogniser { 

     UIScreenEdgePanGestureRecognizer* r = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpFromBottom:)]; 
     r.minimumNumberOfTouches = 1; 
     r.maximumNumberOfTouches = 1; 
     r.delaysTouchesBegan = YES; 
     r.delegate = self; 
     [r setEdges:UIRectEdgeBottom]; 

} 

這是獲取準確執行的方法,當我想到:

- (void)swipeUpFromBottom:(UIScreenEdgePanGestureRecognizer*)gestureEvent { 

    // fault occurs here! gestureEvent.edges is always UIRectEdgeNone 
    if (gestureEvent.edges == UIRectEdgeBottom) { 
     // do some stuff 
    } 

} 

這是非常簡單的,但我需要測試邊緣屬性以查看哪個邊緣被識別,上面的示例僅顯示問題。我的實際代碼庫在每個邊緣檢測到,然後我需要進一步分解。

很明顯,我可以通過觸發不同的方法來解決這個問題,但我不希望在這種情況下。

有誰知道爲什麼這個屬性沒有設置我會如何預期?

非常感謝您的幫助。

回答

4

據我所知,儘管名稱邊緣,這必須設置爲一個單一的邊緣。因此,不需要檢查哪個邊被識別,因爲swipeUpFromBottom只會在從底部向上滑動時觸發。如果將代理設置爲self,則可以將邊緣設置爲左側的另一個UIScreenEdgePanGestureRecognizer添加到名爲leftRecognizer的代碼中,然後在代理方法中可以檢查由此切換到哪個方向用戶。

-(BOOL)gestureRecognizerShouldBegin:(UIScreenEdgePanGestureRecognizer *)g 
{ 
    if (g == leftRecognizer) { 
    //swiped left. 
    } else if (g == r) { 
    //swiped down. 
    } 
} 
+0

很酷,謝謝。我設置了個人識別器,但希望它們都指向相同的方法。我已經按照你的建議分解了這個問題,在我的腦海中,這只是一個多餘的東西,但是現在沒有關係。 – 2014-10-27 17:45:02

+0

屬性名稱是'邊緣',並有'UIRectEdgeAll'。 Apple的文檔中沒有任何內容。 Apple給了什麼? – bejado 2017-11-27 05:45:12