UIScrollView не распознает ShakeGesture - PullRequest
2 голосов
/ 21 марта 2019

ScrollView не распознает жест дрожания

У меня есть 3 файла.

1.ContentVC - состоит из scrollView для пролистывания между контроллерами вида

2.FirstVC - содержит встряхиваниеfunction

3.SecondVC - контроллер представления по умолчанию

Когда я встряхиваю устройство, ничего не происходит.

ContentVC.swift
class ContainerVC: UIViewController {
    @IBOutlet weak var scroll: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let left = self.storyboard?.instantiateViewController(withIdentifier: "vw") as! UINavigationController
        self.addChild(left)
        self.scroll.addSubview(left.view)
        self.didMove(toParent: self)

        let last = self.storyboard?.instantiateViewController(withIdentifier: "lastviewNav") as! UINavigationController
        self.addChild(last)
        self.scroll.addSubview(last.view)
        self.didMove(toParent: self)

        var middleframe:CGRect = last.view.frame
        middleframe.origin.x = self.view.frame.width
        last.view.frame = middleframe

        self.scroll.contentSize = CGSize(width: (self.view.frame.width) * 2, height: (self.view.frame.height))
    }
}
FirstVC.swift
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if event?.subtype == UIEvent.EventSubtype.motionShake {
        if motion == .motionShake {
            print("quote is appearing by shaking the device")
        } else {
            print("No quote is coming")
        }
    }
}

1 Ответ

2 голосов
/ 21 марта 2019

События движения первоначально доставляются первому респонденту и передаются по цепочке респондента соответствующим образом.
https://developer.apple.com/documentation/uikit/uiresponder/1621090-motionended

Поэтому убедитесь, что:

  1. FirstVC в состоянии стать первым респондентом:
override var canBecomeFirstResponder: Bool {
    return true
}
  1. FirstVC является первым респондентом в определенный момент времени:
firstVC.becomeFirstResponder()

Теперь ваш UIViewController сможет получать события встряхивания.

Вы можете узнать больше о цепочке респондеров: Как работает цепочка респондентов в IPhone? Что такое «следующие респонденты»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...