拖动手势使用(UIPanGestureRecognizer)

拖动手势创建

    UIPanGestureRecognizer * panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panMoveGesture:)];
    [topPaperView addGestureRecognizer:panGesture];

拖动事件(以下示例为上下拖动,上下左右拖动及滑行见注释部分)

//拖动手势
-(void)panMoveGesture:(UIPanGestureRecognizer *)recognizer
{
    if (_isResponseGesture == NO) {
        return;
    }
    //视图前置操作
    [recognizer.view.superview bringSubviewToFront:recognizer.view];
    CGPoint center = recognizer.view.center;
    CGFloat cornerRadius = recognizer.view.frame.size.width/2;
    CGPoint translation = [recognizer translationInView:self.view];
//    recognizer.view.center = CGPointMake(center.x+translation.x, center.y+translation.y);(上下左右滑动)-------
//限制上下滑动的最大和最小距离(限制只能上下滑动)
    if (center.y+translation.y-20>Main_Screen_Height/3*2)
    {
        recognizer.view.center = CGPointMake(center.x, Main_Screen_Height/3*2+20);

    }
    else if (center.y+translation.y-20<Main_Screen_Height/3)
    {
        recognizer.view.center = CGPointMake(center.x, Main_Screen_Height/3);

    }
    else
    {
        recognizer.view.center = CGPointMake(center.x, center.y+translation.y);

    }
    
    [recognizer setTranslation:CGPointZero inView:recognizer.view.superview];
//下面注释内容为滑行设置
//    if (recognizer.state == UIGestureRecognizerStateEnded) {
//        //计算速度向量的长度,当他小于200时,滑行会很短
//        CGPoint velocity = [recognizer velocityInView:recognizer.view.superview];
//        CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
//        CGFloat slideMult = magnitude / 200;
////          NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult); //e.g. 397.973175, slideMult: 1.989866
//
//        //基于速度和速度因素计算一个终点
//        float slideFactor = 0.1 * slideMult;
//        CGPoint finalPoint = CGPointMake(center.x + (velocity.x * slideFactor), center.y + (velocity.y * slideFactor));
//        //限制最小[cornerRadius] 和最大边界值 [self.view.bounds.size,width - cornerRadius],以免拖动出屏幕界限
//        finalPoint.x = MIN(MAX(finalPoint.x, cornerRadius), Main_Screen_Width - cornerRadius);
//        finalPoint.y = MIN(MAX(finalPoint.y, cornerRadius), Main_Screen_Height - cornerRadius);
//        
//        //使用UIView动画 使view滑行到终点
//        [UIView animateWithDuration:slideFactor * 2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
//            recognizer.view.center = finalPoint;
//        } completion:nil];
//        
//    }
    
//根据view拖动位置,修改其他view的相关信息    
_pullTopY = recognizer.view.center.y-20;
    paperCV.frame = CGRectMake(0, 64, Main_Screen_Width, Main_Screen_Height-114);
    layout.sectionInset = UIEdgeInsetsMake(_pullTopY-64+40, 0, 0, 0);
    layout.itemSize = CGSizeMake(Main_Screen_Width, Main_Screen_Height-50-_pullTopY-40);
//    [self setPullTopY:recognizer.view.center.y-20];

}

参考文章:http://www.cnblogs.com/bolin-123/p/5393370.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,050评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,536评论 4 61
  • 你和几个人一起 走过了平丘壑壑 百味陈杂 日光斑驳 影显落魄 我只有一个人 乘着月光浪迹天涯 低头为家 风掠雨洒 ...
    甘汝月阅读 1,270评论 0 1
  • 女神节快乐!
    凤儿DuDu阅读 1,742评论 2 4
  • 我记得我们相隔十五年之后的那个下午,是他送我回去的,因为我出门的时候忘记带钥匙,本来我说没关系,我可以找锁匠的,但...
    骑着蜗牛看彩虹阅读 1,801评论 0 0

友情链接更多精彩内容