利用手势拖拽控件并设置拖拽范围

在QQ语音通话时,隐藏语音通话界面后会出现一个按钮可以浮动拖拽,现在先来实现以下按钮的拖拽功能,稍后再来实现隐藏和进入通话界面的转场动画部分。
第一步:原理图。

IMG_0965.jpg

在给控件添加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];
}

第三步,效果图。

QQ20170612-101533.gif

代码不足的地方,还请多多指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,305评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,787评论 25 709
  • 我记得小时候 楼下老槐树下 坐着一个九十多岁的老婆婆 一年四季都穿着她那套黑色衣服 听说她是房东阿姨的外婆 身体很...
    风继续吹0912阅读 226评论 0 0
  • 情难舍, 意难丢, 冰轮挂床头。 欲语又愧羞, 痴想星辰做信使, 传递冰心忧不明。 满腔愁。 解语花, 难走寻, ...
    润泽杂夥阅读 257评论 7 7
  • 熊曦(1964~)江西丰城人,出身于书香门第,其祖父熊静安乃江西大隐。工诗词书画,毕业于南昌师院及华南师大美术系,...
    神话世家阅读 937评论 1 1