首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIScrollView as UIControl

UIScrollView as UIControl
EN

Stack Overflow用户
提问于 2018-06-12 09:59:16
回答 1查看 299关注 0票数 0

我正在使用UIControl实现UIScrollView。当用户用手指滚动滚动视图时,我希望发送.valueChanged事件,而不是其他情况。为此,我需要比较我计算的滚动发生时的currentValue,如果它与以前的值不同,则通过sendActionsForControlEvents API发送一个.valueChanged事件。我的问题:

(a)在所有情况下,了解用户拖动滚动视图(滚动也可以在我的代码中使用自动API) -- scrollView.isDragging或scrollView.isTracking,或两者兼而有之,最可靠的方法是什么?

(b)注意到currentValue中的变化(不存储先前的值)的方法是什么?我正在使用Swift 4进行此操作,但它似乎并没有给出旧的价值:

代码语言:javascript
复制
 private(set) public var currentValue = Int(0) {
    willSet (newValue) {
        NSLog("Old value \(currentValue), new \(newValue)")
    }
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 10:39:56

从使用代表的评论来看,我认为固着的解决办法应该类似于:

代码语言:javascript
复制
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中获取您的事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50814377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档