您可以使用UIPanGestureRecognizer来实现向上向下拖拽手势,并使用动画来使headerView视图跟随拖拽。以下是一个示例代码:

首先,在您的视图控制器中定义一个属性来持有headerView:

var headerView: UIView!

在视图加载完成时,创建headerView并添加拖拽手势:

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 创建headerView并设置frame
    headerView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 100))
    headerView.backgroundColor = .red
    
    // 添加拖拽手势
    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:)))
    headerView.addGestureRecognizer(panGesture)
    
    // 将headerView添加到view上
    view.addSubview(headerView)
}

然后,在handlePanGesture方法中处理拖拽手势的开始、移动和结束:

@objc func handlePanGesture(_ gesture: UIPanGestureRecognizer) {
    let translation = gesture.translation(in: view)
    
    switch gesture.state {
    case .began:
        // 拖拽开始时,保存headerView的初始位置
        headerView.transform = CGAffineTransform(translationX: 0, y: 0)
    case .changed:
        // 根据拖拽的距离移动headerView
        headerView.transform = CGAffineTransform(translationX: 0, y: translation.y)
    case .ended:
        // 停止拖拽时,根据headerView的位置决定是否将其恢复到初始位置或者移动到顶部
        if headerView.frame.origin.y < view.safeAreaInsets.top {
            // 移动headerView到顶部
            UIView.animate(withDuration: 0.3) {
                self.headerView.transform = CGAffineTransform(translationX: 0, y: -self.headerView.frame.origin.y)
            }
        } else {
            // 将headerView恢复到初始位置
            UIView.animate(withDuration: 0.3) {
                self.headerView.transform = CGAffineTransform(translationX: 0, y: 0)
            }
        }
    default:
        break
    }
}

通过上述代码,您可以通过拖拽手势向上或向下移动headerView,并根据headerView的位置决定是否将其移动到顶部或者恢复到初始位置

ios view 上有个子viewheaderView 给headerView添加向上向下拖拽手势 headerView视图跟随拖拽

原文地址: https://www.cveoy.top/t/topic/iMy5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录