gpt4 book ai didi

ios - 如何确定 DatePicker 是否正在旋转?

转载 作者:行者123 更新时间:2023-12-01 22:19:44 25 4
gpt4 key购买 nike

如何确定 DatePicker 当前是否正在旋转/滚动?我几乎尝试了所有方法并查看了此处的所有答案,但没有一个是正确的或有效的。

本质上,我想在它旋转时禁用一个按钮,然后在它停止时启用同一个按钮。

谢谢!

最佳答案

我想做同样的事情,所以围绕着 UIControl 和 UIDatePicker 的类转储。似乎没有任何效果,因为 maddy在评论部分说明。

好吧,我确实想到这是一种方法 - 在短时间内截取选择器 View - 比如 50 毫秒 - 并在之前和之后进行图像比较,看看它是否发生变化。这看起来确实需要做很多工作!

所以我尝试了各种方法(iOS13),我发现我可以使用手势识别器来检测第一次触摸选择器的时间,以及 UIDatePicker 自己的识别器何时更新。这让我通常可以检测到用户交互何时可能结束。

然后,我可以等待旋转停止的 Action 方法。啊,但是如果用户只是移动了一个轮子,然后把它放回去,会发生什么?如果新日期与旧日期相同,则无操作方法。所以我所做的是使用延迟调度工作项,并在两秒钟后将微调器裁定为停止。

final class DHDatePicker: UIDatePicker, UIGestureRecognizerDelegate {

var isSpinning = false { didSet { print("IS SPINNING", isSpinning) } }

private var didAddGR = false
private var cancelBlock = DispatchWorkItem(block: {})

override init(frame: CGRect) {
super.init(frame: frame)

let gr = UISwipeGestureRecognizer()
gr.direction = [.up, .down]
gr.delegate = self

self.addGestureRecognizer(gr)
self.addTarget(self, action: #selector(dateChanged(_:)), for: .primaryActionTriggered)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}


@objc func gr(_ gr: UISwipeGestureRecognizer) {
switch gr.state {
case .ended, .cancelled, .failed:
cancelBlock.cancel()
cancelBlock = DispatchWorkItem(block: {
if self.isSpinning {
self.isSpinning = false
}
})
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0, execute: cancelBlock)
print("GR ENDED")
default:
print("WTF")
break
}
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
isSpinning = true
return true
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if didAddGR == false {
didAddGR = true
print("DP Attach to Other GR")
otherGestureRecognizer.addTarget(self, action: #selector(gr(_:)))
}
return false
}

@objc func dateChanged(_ sender: UIDatePicker) {
print("DP ActionMethod")
cancelBlock.cancel()
isSpinning = false
}

}

关于ios - 如何确定 DatePicker 是否正在旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46180546/

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