根据项目需求,需要一个IamgeView达到上下拖动来改变下方View高度的需求,现有手势中UIPanGestureRecognizer可以实现可以实现起上下左右拖动。
思考:在拖动时是否可以通过判断x轴和y轴的移动距离来判断是左右还是上下移动,再来禁止其左右移动。 代码部分:
//可拖动ImageView
- (void)setDragImageView{
self.dragImageView.userInteractionEnabled = YES;
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureClick:)];
[self.dragImageView addGestureRecognizer:panGesture];
}
- (void)panGestureClick:(UIPanGestureRecognizer *)panGest{
CGPoint panGesturePoint = [panGest translationInView:self.allTitleLowerView];
panGest.view.center = CGPointMake(panGest.view.center.x + 0, panGest.view.center.y - panGesturePoint.y);
[self.answersViewHeight setConstant: self.answersViewHeight.constant - panGesturePoint.y ];
if (panGest.state == UIGestureRecognizerStateFailed || panGest.state == UIGestureRecognizerStateEnded) {
if (panGest.view.center.y < 20) {
panGest.view.center = CGPointMake(panGest.view.center.x, 21);
[self.answersViewHeight setConstant: kScreenHeight - 44 - 40];
}
}
//重置拖拽手势
[panGest setTranslation:CGPointZero inView:self.view];
}
复制代码
最后呈现效果:
PS:在网上百度时找到了他人方法需要重新自定义一个手势继承 UIPanGestureRecognizer,使用:比较底层的
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
复制代码
最终呈现出得效果一样