gpt4 book ai didi

ios - iOS/UIKit 是否内置了对 dinging 之类的调度滚动的支持

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:00:25 24 4
gpt4 key购买 nike

我想实现一个 Action ,当我按住时开始重复执行一个 Action (类似于桌面用户界面上的滚动按钮)。 UIGestureRecognizer/events 框架对此有一流的支持,还是我自己动手?

例如

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 来做到这一点。我的问题是我是否需要如上所示滚动我自己的 ding 循环,或者 UIKit 中是否有我目前不知道但应该利用的更多一流内容。

最佳答案

我认为您的方法是正确的。您可以使用计时器来重复某些操作,但您应该 add the created timer进入带有 common 的运行循环模式,如果没有这种模式,运行循环将不会在用户触摸屏幕时调用定时器的 Action

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

您也可以使用 CADisplayLink , 调用你的 Action 。您可以在 my library 中找到使用 CADisplayLink 的示例, 女巫可以帮助您实现基于 CADisplayLink 的动画:

let link = CADisplayLink(target: self, selector: #selector(updateAction(sender:)));
link.add(to: RunLoop.main, forMode: .commonModes);

关于ios - iOS/UIKit 是否内置了对 dinging 之类的调度滚动的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com