【问题标题】:Swipes/scroll down first will disappear the view首先滑动/向下滚动将消失视图
【发布时间】:2018-11-08 20:19:18
【问题描述】:

如何让UIScrollView 开始从上到下滚动。当我滑动(向下)时,它会先向下滚动而不是向上并消失。我现在拥有的是,我可以先向上滚动然后向下滚动,而向下滚动它会消失。 这是我的代码-

func scrollViewDidScroll(_ scrollView: UIScrollView) {

        //for toogle swipe view
        if scrollView.contentOffset.y < 120 {
            self.swipeMsgView.isHidden = false
        }else {
            self.swipeMsgView.isHidden = true
        }
        //for making bottom inset
        if scrollView.contentOffset.y < 190 {
            var contentInset:UIEdgeInsets = scrollView.contentInset
            contentInset.bottom = scrollView.contentOffset.y-100
            scrollView.contentInset = contentInset
        }
        //when swipe down
        if scrollView.contentOffset.y == 0 {
            if !isScrollDownFirstTime{
                UIView.animate(withDuration: 0.5, animations: {
                    self.dismiss(animated: true, completion: nil)
                })
            }
        }
        //for tracking first time scrolling
        if scrollView.contentOffset.y > 150 {
            isScrollDownFirstTime = false
        }
    }

它工作正常。但是我想在用户先滑动或向下滚动时消失视图(滑动手势不起作用)。有没有什么优雅的方法可以用这个现有的功能做到这一点?谢谢。

【问题讨论】:

  • 对不起,只是与您正在寻找的内容混淆。你的意思是用户开始向下滑动的那一刻你想隐藏这个视图吗?另外,当滚动视图向上滑动或到达顶部时,您想让视图重新出现吗?
  • @AlanS 是的,当用户开始向下滑动时,我想隐藏/关闭视图并向他们展示另一个视图控制器。并且您的第二个查询已经实现。
  • 看看我评论末尾的链接。也许您可以使用链接来获取 scrollView 滚动的速度。他们正在获取它的绝对值,因此您可能不想使用绝对值来查看速度是正还是负,这可以用来判断方向。在函数开始时,您可以检查速度,如果速度下降,则根据此显示和隐藏您的视图。 stackoverflow.com/questions/3719753/…
  • 感谢您的帮助。但我的问题是我想在用户第一次滚动/向下滑动时关闭视图而不是向上。我可以从我当前的代码中测量 scrollView.contentOffset.y :)
  • 找到原因了吗?我有同样的问题,无法检测到原因。是因为自动布局吗?

标签: ios swift uiscrollview uiswipegesturerecognizer


【解决方案1】:

@Serg Smyk,这是我解决问题的方法。

    fileprivate var isScrollDownFirstTime = true

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        print("Content y offet : \(scrollView.contentOffset.y)")
        //for toogle swipe view
        if scrollView.contentOffset.y < 120 {
            self.swipeMsgView.isHidden = false
        } else {
            self.swipeMsgView.isHidden = true
        }
        
        //for making bottom inset
        if scrollView.contentOffset.y < 190 {
            var contentInset:UIEdgeInsets = scrollView.contentInset
            contentInset.bottom = scrollView.contentOffset.y-100
            scrollView.contentInset = contentInset
        }
        
        //when swipe down
        if scrollView.contentOffset.y == 0 {
            print(CLASS_NAME+" -- scrollViewDidScroll() -- contentOffset.y = 0")
            if !isScrollDownFirstTime{
                UIView.animate(withDuration: 0.5, animations: {
                    self.dismiss(animated: true, completion: nil)
                })
            }
        }

        if scrollView.contentOffset.y < 1 {
            print(CLASS_NAME+" -- scrollViewDidScroll() -- contentOffset.y<0")
            UIView.animate(withDuration: 0.5, animations: {
                self.dismiss(animated: true, completion: nil)
            })
        }
        //for tracking first time scrolling
        if scrollView.contentOffset.y > 150 {
            isScrollDownFirstTime = false
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2023-03-17
    相关资源
    最近更新 更多