最近写了一个底部弹出的类似抖音评论页的需求,产品要加个下拉拖动消失的效果,自己手写了一个。
直接上代码吧
private func handlePanGesture(pan: UIPanGestureRecognizer) {
let point = pan.translation(in: mainView)
//每次移动记录偏移百分比
currentPercent = min(max(point.y/mainView.frame.size.height, 0), 1)
switch pan.state {
case .began:
//记录起始y值
beginY = pan.view?.mj_y
case .changed:
//根据起始y值和偏移y,改变目标view的y值
pan.view?.mj_y = (beginY ?? screenHeight - mainViewSize.mainHeight) + point.y
//设置上边界
pan.view?.mj_y = max(pan.view?.mj_y ?? screenHeight - mainViewSize.mainHeight, screenHeight - mainViewSize.mainHeight)
case .ended:
// 偏移超过设定值,消失;否则复位
if currentPercent > 1/3 {
UIView.animate(withDuration: 0.25, animations: {
pan.view?.mj_y = screenHeight
}, completion: {_ in
self.onClose()
})
} else {
UIView.animate(withDuration: 0.25, animations: {
pan.view?.mj_y = screenHeight - self.mainViewSize.mainHeight
}, completion: nil)
}
default:
break
}
}