拖動(dòng)手勢(shì)使用(UIPanGestureRecognizer)

拖動(dòng)手勢(shì)創(chuàng)建

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

拖動(dòng)事件(以下示例為上下拖動(dòng),上下左右拖動(dòng)及滑行見注釋部分)

//拖動(dòng)手勢(shì)
-(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);(上下左右滑動(dòng))-------
//限制上下滑動(dòng)的最大和最小距離(限制只能上下滑動(dòng))
    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];
//下面注釋內(nèi)容為滑行設(shè)置
//    if (recognizer.state == UIGestureRecognizerStateEnded) {
//        //計(jì)算速度向量的長(zhǎng)度,當(dāng)他小于200時(shí),滑行會(huì)很短
//        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
//
//        //基于速度和速度因素計(jì)算一個(gè)終點(diǎn)
//        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],以免拖動(dòng)出屏幕界限
//        finalPoint.x = MIN(MAX(finalPoint.x, cornerRadius), Main_Screen_Width - cornerRadius);
//        finalPoint.y = MIN(MAX(finalPoint.y, cornerRadius), Main_Screen_Height - cornerRadius);
//        
//        //使用UIView動(dòng)畫 使view滑行到終點(diǎn)
//        [UIView animateWithDuration:slideFactor * 2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
//            recognizer.view.center = finalPoint;
//        } completion:nil];
//        
//    }
    
//根據(jù)view拖動(dòng)位置,修改其他view的相關(guān)信息    
_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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,021評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,261評(píng)論 4 61
  • 你和幾個(gè)人一起 走過了平丘壑壑 百味陳雜 日光斑駁 影顯落魄 我只有一個(gè)人 乘著月光浪跡天涯 低頭為家 風(fēng)掠雨灑 ...
    甘汝月閱讀 165評(píng)論 0 1
  • 女神節(jié)快樂!
    鳳兒DuDu閱讀 268評(píng)論 2 4
  • 我記得我們相隔十五年之后的那個(gè)下午,是他送我回去的,因?yàn)槲页鲩T的時(shí)候忘記帶鑰匙,本來(lái)我說(shuō)沒關(guān)系,我可以找鎖匠的,但...
    騎著蝸??床屎?/span>閱讀 298評(píng)論 0 0

友情鏈接更多精彩內(nèi)容