模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验

模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第1张图片
模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第2张图片
模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第3张图片

只要技术就是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];



模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第4张图片
模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第5张图片
模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第6张图片
模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第7张图片
后记:发现这样写还有一个bu'g 我还是在张贴一下修改的bug的代码 注意self.isAfterSecondFullTime的处理

修改

模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验_第8张图片

你可能感兴趣的:(模仿地图搜索 上滑距离决定列表一半或者全部显示的用户体验)