首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Swift中获取UIScrollView垂直方向?

如何在Swift中获取UIScrollView垂直方向?
EN

Stack Overflow用户
提问于 2015-08-06 21:38:45
回答 7查看 67.7K关注 0票数 44

如何在VC中获得向上/向下的滚动/滑动方向?

我想在我的VC中添加一个UIScrollView或其他东西,它可以查看用户是向上还是向下滑动/滚动,然后隐藏/显示UIView,这取决于它是向上/向下的手势。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-08-06 22:01:38

如果您使用UIScrollView,那么您可以从scrollViewDidScroll:函数中获益。您需要按如下方式保存它的最后一个位置( contentOffset)和更新它:

代码语言:javascript
复制
// variable to save the last position visited, default to zero
private var lastContentOffset: CGFloat = 0

func scrollViewDidScroll(scrollView: UIScrollView!) {
    if (self.lastContentOffset > scrollView.contentOffset.y) {
        // move up
    }
    else if (self.lastContentOffset < scrollView.contentOffset.y) { 
       // move down
    }

    // update the new position acquired
    self.lastContentOffset = scrollView.contentOffset.y
}

当然,还有其他方法可以做到这一点。

我希望这对你有帮助。

票数 108
EN

Stack Overflow用户

发布于 2015-12-28 01:05:16

我使用了维克多的答案,但略有改进。当滚动经过滚动的结尾或开头,然后获得回弹效果时。我已经通过计算scrollView.contentSize.height - scrollView.frame.height添加了约束,然后将scrollView.contentOffset.y范围限制为大于0或小于scrollView.contentSize.height - scrollView.frame.height,在反弹时不做任何更改。

代码语言:javascript
复制
func scrollViewDidScroll(_ scrollView: UIScrollView) {

    if lastContentOffset > scrollView.contentOffset.y && lastContentOffset < scrollView.contentSize.height - scrollView.frame.height {
        // move up
    } else if lastContentOffset < scrollView.contentOffset.y && scrollView.contentOffset.y > 0 {
        // move down
    }

    // update the new position acquired
    lastContentOffset = scrollView.contentOffset.y
}
票数 21
EN

Stack Overflow用户

发布于 2015-08-06 21:43:50

带UISwipeGestureRecognizer的Swift 2-4

另一个选项是使用将识别向所请求方向滑动的UISwipeGestureRecognizer (这将适用于所有视图,而不仅仅是UIScrollView

代码语言:javascript
复制
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let upGs = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.handleSwipes(sender:)))
        let downGs = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.handleSwipes(sender:)))
        
        upGs.direction = .up
        downGs.direction = .down
        
        self.view.addGestureRecognizer(upGs)
        self.view.addGestureRecognizer(downGs)
    }

    @objc func handleSwipes(sender:UISwipeGestureRecognizer) {
        
        if (sender.direction == .up) {
            print("Up")
        }
        
        if (sender.direction == .down) {
            print("Down")
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31857333

复制
相关文章

相似问题

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