我正在使用UIControl实现UIScrollView。当用户用手指滚动滚动视图时,我希望发送.valueChanged事件,而不是其他情况。为此,我需要比较我计算的滚动发生时的currentValue,如果它与以前的值不同,则通过sendActionsForControlEvents API发送一个.valueChanged事件。我的问题:
(a)在所有情况下,了解用户拖动滚动视图(滚动也可以在我的代码中使用自动API) -- scrollView.isDragging或scrollView.isTracking,或两者兼而有之,最可靠的方法是什么?
(b)注意到currentValue中的变化(不存储先前的值)的方法是什么?我正在使用Swift 4进行此操作,但它似乎并没有给出旧的价值:
private(set) public var currentValue = Int(0) {
willSet (newValue) {
NSLog("Old value \(currentValue), new \(newValue)")
}
}发布于 2018-06-12 10:39:56
从使用代表的评论来看,我认为固着的解决办法应该类似于:
class MyClass: NSObject, UIScrollViewDelegate {
private var isUserDragging: Bool = false
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if isUserDragging {
// Should trigger only when scroll view visible frame changes and user is dragging
print("User is dragging")
}
}
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
isUserDragging = true // Should only be called when user starts dragging
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if decelerate == false {
isUserDragging = false // Disable user dragging only if no deceleration will be performed
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
isUserDragging = false // When deceleration is done user is not dragging anymore
}
}现在,您应该能够在scrollViewDidScroll中获取您的事件。
https://stackoverflow.com/questions/50814377
复制相似问题