Есть ли в iOS / UIKit встроенная поддержка планирования прокрутки, например, дингинга? - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу реализовать действие, которое при нажатии и удерживании начинает многократно выполнять действие (аналогично кнопке прокрутки в пользовательском интерфейсе рабочего стола).Есть ли первоклассная поддержка для этого в UIGestureRecognizer / events framework, или я просто свернул свой собственный?

Например,

var timer:Timer?

func killDing() {
    self.timer?.invalidate()
    self.timer = nil
}

func startDing() {
    self.killTimer()
    self.timer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) {
        self.ding() // this is where the repeated code happens
    }
}

override func beginTracking(_ touch:UITouch, with event:UIEvent?) -> Bool {
    self.startDing()
}

override func endTracking(_ touch: UITouch?, with event: UIEvent?) {
    super.endTracking(touch, with: event)
    self.killDing()
}

Я, конечно, могу сделать это и с LongPressGestureRecognizer.Мой вопрос заключается в том, нужно ли мне развернуть свой собственный цикл дин, как показано выше, или есть ли в UIKit что-то более первоклассное, о чем я в данный момент не знаю и должен ли он воспользоваться.

1 Ответ

0 голосов
/ 11 декабря 2018

Я думаю, вы на правильном пути.Вы можете использовать таймеры для повторения некоторых действий, но вы должны добавить созданный таймер в цикл выполнения с режимом common, без этого режима,цикл выполнения не будет вызывать действие таймера, пока пользователь касается экрана

let timer = Timer(timerInterval: interval, repeats: true, block: block) 
RunLoop.current.add(timer, forMode: . common)

Также вы можете использовать CADisplayLink, чтобы вызвать ваше действие.Вы можете найти пример использования CADisplayLink в моей библиотеке , которая может помочь вам реализовать анимацию на основе CADisplayLink:

let link = CADisplayLink(target: self, selector: #selector(updateAction(sender:)));
link.add(to: RunLoop.main, forMode: .commonModes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...