在QQ语音通话时,隐藏语音通话界面后会出现一个按钮可以浮动拖拽,现在先来实现以下按钮的拖拽功能,稍后再来实现隐藏和进入通话界面的转场动画部分。
第一步:原理图。
在给控件添加UIPanGestureRecognizer
手势后,可以在action方法中来限制手势所添加控件的拖拽范围,如上图,我们把范围限制在屏幕内。
第二步:代码实现。
#pragma mark 手势执行方法
- (void) handlePan:(UIPanGestureRecognizer*) recognizer
{
CGPoint translation = [recognizer translationInView:self.imageView];
CGPoint viewNewPoint = CGPointMake(recognizer.view.center.x + translation.x,recognizer.view.center.y + translation.y);
//TODO:给拖拽控件设置范围
viewNewPoint.y = MAX(recognizer.view.frame.size.height/2, viewNewPoint.y);
viewNewPoint.y = MIN(self.view.frame.size.height - recognizer.view.frame.size.height/2, viewNewPoint.y);
viewNewPoint.x = MAX(recognizer.view.frame.size.width/2, viewNewPoint.x);
viewNewPoint.x = MIN(self.view.frame.size.width - recognizer.view.frame.size.width/2,viewNewPoint.x);
recognizer.view.center = viewNewPoint;
[recognizer setTranslation:CGPointZero inView:self.view];
}
第三步,效果图。
代码不足的地方,还请多多指教。