ios view 上有个子viewheaderView 给headerView添加向上向下拖拽手势 headerView视图跟随拖拽
您可以使用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的位置决定是否将其移动到顶部或者恢复到初始位置
原文地址: https://www.cveoy.top/t/topic/iMy5 著作权归作者所有。请勿转载和采集!