只要技术就是UIPanGestureRecognizer
3个代理方法
(1)- (void)draggingStarted:(UIPanGestureRecognizer *)gestureRecognizer
///得到开始拖得点
self.pointDragStart = [gestureRecognizer locationInView:self.view];
self.pointDragStartOffset = [gestureRecognizer locationInView:self.bottomResultBtn];
(2)- (void)dragInProgresss:(UIPanGestureRecognizer *)gestureRecognizer
这个方法实现view的拖拽 还有限制超出nav tab范围 通过这个方法 根据一开始的点self.pointDragStartOffset比较 得到自动变化的高度 然后在不超出范围内实现拖得效果
CGPoint pointDragLocation = [gestureRecognizer locationInView:self.view];
float heightToSet = IPHONE_HEIGHT - pointDragLocation.y + self.pointDragStartOffset.y;
if(heightToSet >= DRAG_VIEW_MINIMIZED_STATE_HEIGHT && heightToSet <= IPHONE_HEIGHT - DRAG_VIEW_TOP_MARGIN)
{////效果
//self.constraintDraggableViewHeight.constant = heightToSet;
self.bottomResultBtn.frame = CGRectMake(0, IPHONE_HEIGHT - heightToSet , IPHONE_WIDTH, 40);
self.searchTableView.frame = CGRectMake(0, CGRectGetMaxY(self.bottomResultBtn.frame), IPHONE_WIDTH, IPHONE_HEIGHT - self.bottomResultBtn.frame.origin.y -self.bottomResultBtn.frame.size.height) ;
}
(3)- (void)dragFinished:(UIPanGestureRecognizer *)gestureRecognizer
这个方法处理view的改变
///得到最后释放的点 这个2个变量很重要 因为解决一个一开始上拉一大一半 下面的tableview 显示一半。然后想让往下滑动 恢复不了原样 却还是维持一半的bug
self.pointBeforeDragStart = self.pointDragOutStart;(这句代码有问题,因为一开始self.pointDragOutStart)没有值,然后导致后面
if(self.pointDragOut.y - self.pointBeforeDrag.y)始终大于0 导致第一次半拉不足 一直是恢复原样!!!!)要判断 加个变量判断是否第一次
//标示是否第二次以后半拉上去。
@property(nonatomic,assign)BOOL isAfterSecondFullTime; 默认为no
if (self.isAfterSecondFullTime == false)
{
self.pointBeforeDrag = CGPointMake(0, IPHONE_HEIGHT);//[gestureRecognizer locationInView:self.navigationController.W];
}
else
{
self.pointBeforeDrag = self.pointDragOut;
}
self.pointDragOutStart = [gestureRecognizer locationInView:self.bottomResultBtn];
修改