7

Po dodaniu elementu paska przycisków paska nawigacji niestandardowej utraciłem możliwość używania funkcji domyślnej, aby wrócić. Chciałbym mieć możliwość używania "machnięcia z krawędzi", aby wrócić.Kontroler widoku popu przy użyciu funkcji rozpoznawania gestów krawędzi ekranu nie podążania za kciukiem

Dodałem Recogniser Gest Edge Pan i podłączyłem go do @IBAction, ale działanie zwalniające dzieje się całkowicie, gdy tylko zostanie rozpoznany gest pan.

Zamiast powoli podążać za moim kciukiem (jak widać w innych aplikacjach), bieżący widok przesuwa się z predefiniowaną animacją.

Jak zrobić animację po kciuku za pomocą Edge Pan Gesture Recogniser?

@IBAction func edgeSwipe(sender: AnyObject) { 
    navigationController?.popViewControllerAnimated(true) 
} 

enter image description here

+1

Dlaczego ten system nie działa? Czy próbowałeś [to] (http://stackoverflow.com/a/28919337/5442445)? – beyowulf

+0

@beyowulf To nie działa, ponieważ dodałem przycisk do elementu przycisku lewego paska. Dodałem tutaj przycisk, ponieważ chcę mieć dostęp do niektórych funkcji stylizacji UIButton. Jednak dodanie normalnego elementu przycisku paska (jeśli chcesz tylko dostosować tytuł) powoduje również, że gest dostarczony przez system przestaje działać. Po drugie: podążyłem za twoim linkiem właśnie teraz i udało mi się odzyskać to samo zachowanie, aby przywrócić domyślną implementację systemu. – Andrej

+0

@beyowulf, wskazałeś mi właściwy kierunek i chciałbym nagrodzić cię nagrodą. Ale jedynym sposobem, aby to zrobić, jest udzielenie odpowiedzi. Więc jeśli podasz co najmniej jedną prostą odpowiedź, otrzymasz nagrodę, to zależy od ciebie :) – Andrej

Odpowiedz

6

Nie ma potrzeby, aby dodać krawędź Pan rozpoznającym gest. Po sugestiach @ beyowulfa byłem w stanie zaimplementować przesunięcie, aby powrócić do funkcji, która zachowuje się w taki sam sposób, jak robi to domyślna implementacja systemu - krawędź widoków podąża za moim kciukiem, przesuwając go, aby go odrzucić.

Usunąłem więc ScreenEdge Pan Gesture Recogniser z serii ujęć, a także usunięto powiązane @IBAction.

Pierwszy kontroler widoku wykonałem jako delegat na interactivePopGestureRecognizer. Oto kod:

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     navigationController?.interactivePopGestureRecognizer?.delegate = self 
    } 
} 

extension ViewController: UIGestureRecognizerDelegate { 

    func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { 
     return navigationController?.viewControllers.count > 1 ? true : false 
    } 
} 
Powiązane problemy