UISwipeGesture in einem SubView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UISwipeGesture in einem SubView

    Hallo ich bin's mal wieder :P ,

    ich stehe vor dem Problem das ich nicht in der Lage bin ein SwipeGesture zu erkennen. Ich selber vermute mal ganz stark das hier die View schuld ist.

    Ich habe folgende Klasse definiert:



    PHP-Quellcode

    1. class OnBoardingViewController: UIViewController, PaperOnboardingDataSource, PaperOnboardingDelegate {
    2. @IBOutlet weak var getStartedButton: UIButton!
    3. override func viewDidLoad() {
    4. super.viewDidLoad()
    5. let onboarding = PaperOnboarding()
    6. onboarding.dataSource = self
    7. onboarding.translatesAutoresizingMaskIntoConstraints = false
    8. onboarding.tag = 100
    9. view.addSubview(onboarding)
    10. view.addSubview(getStartedButton)
    11. self.getStartedButton.alpha = 0
    12. let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(sender:)))
    13. leftSwipe.direction = .left
    14. // Keines dieser Aufrufe hat geholfen
    15. let onboardingView = view.viewWithTag(100)
    16. onboardingView?.addGestureRecognizer(leftSwipe)
    17. onboarding.addGestureRecognizer(leftSwipe)
    18. view.addGestureRecognizer(leftSwipe)
    19. DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(4), execute: {
    20. UIView.animate(withDuration: 0.8, animations: {
    21. self.getStartedButton.alpha = 1
    22. })
    23. })
    24. // add constraints
    25. for attribute: NSLayoutAttribute in [.left, .right, .top, .bottom] {
    26. let constraint = NSLayoutConstraint(item: onboarding,
    27. attribute: attribute,
    28. relatedBy: .equal,
    29. toItem: view,
    30. attribute: attribute,
    31. multiplier: 1,
    32. constant: 0)
    33. view.addConstraint(constraint)
    34. }
    35. }
    36. @objc func handleSwipe(sender: UISwipeGestureRecognizer) {
    37. if sender.state == .ended {
    38. print(">>>>>>>Has swiped<<<<<<<<")
    39. }
    40. }
    Alles anzeigen
    Das Ziel das ich erreichen möchte wäre es, nachdem ich 3-mal nach Links "geswiped" habe, ich dann ein Button anzeige lasse.
    Natürlich habe ich das noch nicht so gemacht, da ich momentan an der Erkennung des swipes hänge.

    Ich hab den GestureRecognizer an alle möglichen Views drangehängt, dennoch klappt das nicht, woran könnte das liegen? ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Swiffer ()

  • nussratte schrieb:

    Ich hab mir den Code nicht angeguckt
    Aber warum kein Scrollview oder CollectionView
    Hey, weil ich dieses Onboarding habe auf das ich swipe. Bilder sagen mehr als Tausend Wörter :)
    github.com/Ramotion/paper-onboarding

    Jetzt fragt man sich doch warum ich das möchte, obwohl wie in der .gif dargestellt das swipen funktioniert.Tut es auch!. Aber ich komme nicht von diesem Onboarding runter, daher die SwipeGesture Erkennung damit ich einen "Exit-Button" darstellen lasse.
  • Du kannst einen UIGestureRecognizer immer nur einem View zuweisen.

    Dein UISwipeGestureRecognizer dürfte somit nur view zugewiesen sein.

    Wenn ich den Code richtig verstehe, dann dürften onboardingView und onboarding auf den selben View zeigen.

    Ich tippe einfach mal, dass PaperOnboarding eigene UISwipeGestureRecognizer verwendet. Evtl. kommen diese Deinem UISwipeGestureRecognizer in die Quere.

    Um den Butten auf der 3. Page anzuzeigen würde ich einfach das PaperOnboardingDelegate Protokoll entsprechend verwenden. ;)
  • MCDan schrieb:

    Du kannst einen UIGestureRecognizer immer nur einem View zuweisen.
    Aha, das wusste ich davor nicht. Gut zu wissen :)

    MCDan schrieb:


    Um den Butten auf der 3. Page anzuzeigen würde ich einfach das PaperOnboardingDelegate Protokoll entsprechend verwenden. ;)
    Das habe ich natürlich als aller erstes versucht. Die Methode scheint garnicht zu funktionieren wie sie soll.

    Einer dieser Methoden wird so beschrieben:

    Quellcode

    1. func onboardingWillTransitonToIndex(_: Int) {
    2. }
    Ich stelle es mir so vor, dass diese Methode jedes mal mit dem aktuellen Index aufgerufen wird. Nun leider tut sich nichts. Oder habe ich da einen Denkfehler? ?(
  • Swiffer schrieb:



    MCDan schrieb:

    Um den Butten auf der 3. Page anzuzeigen würde ich einfach das PaperOnboardingDelegate Protokoll entsprechend verwenden. ;)
    Das habe ich natürlich als aller erstes versucht. Die Methode scheint garnicht zu funktionieren wie sie soll.
    Einer dieser Methoden wird so beschrieben:

    Quellcode

    1. func onboardingWillTransitonToIndex(_: Int) {
    2. }
    Ich stelle es mir so vor, dass diese Methode jedes mal mit dem aktuellen Index aufgerufen wird. Nun leider tut sich nichts. Oder habe ich da einen Denkfehler? ?(

    Du solltest natürlich auch den delegate beim PaperOnboarding Objekt setzen. ;)