向上滚动时如何撤消视图Y更改?

时间:2018-09-01 20:56:39

标签: ios swift

我在视图控制器的下半部分中有一个textview,并且正在动画其最大约束条件,以便在向上滑动/向下滚动时将Y更改为更“全屏”的外观,但是我不知道如何撤消相反,它返回到原始位置

这是我的代码:

 @IBOutlet weak var viewAllTextViews: UIView!
 @IBOutlet weak var topOfViewAllTextViews: NSLayoutConstraint!

@IBAction func growViewAllTextViews(_ sender: UIPanGestureRecognizer) {
        self.topOfViewAllTextViews.constant = -220
        UIView.animate(withDuration: 1.0) {
            self.view.layoutIfNeeded()
        }
    }

已更新:

尝试运行更新的代码时出现错误。错误是“在展开一个可选值时意外发现nil”,并且我的调试控制台显示topOfViewAllTextViews =(NSLayoutConstraint?)nil。

以下是我推荐的代码:

@IBAction func growViewAllTextViews(_ sender: UIPanGestureRecognizer) {
    let velocity = sender.velocity(in: myView)
    if velocity.y > 0 {
        self.topOfViewAllTextViews.constant = 0
        UIView.animate(withDuration: 1.0) {
            self.view.layoutIfNeeded()
        }
    } else {
        self.topOfViewAllTextViews.constant = -215 // error here
        UIView.animate(withDuration: 1.0) {
            self.view.layoutIfNeeded()
        }
    }
}

在这里我在情节提要中设置了约束。我有一个身高<=,但删除了它以查看是否可以,但是仍然出现错误。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用UIPanGestureRecognizer力度检查平移方向。

@IBAction func growViewAllTextViews(_ sender: UIPanGestureRecognizer) {
    let velocity = gesture.velocity(in: yourView)

    if velocity.y > 0 {
        self.topOfViewAllTextViews.constant = 220
        UIView.animate(withDuration: 1.0) {
            self.view.layoutIfNeeded()
        }
    } else {
        self.topOfViewAllTextViews.constant = -220
        UIView.animate(withDuration: 1.0) {
            self.view.layoutIfNeeded()
        }
    }
}