1. 程式人生 > >關於手勢拖動圖示移動圖示(附帶滑動效果)

關於手勢拖動圖示移動圖示(附帶滑動效果)

- (void)handlePan:(UIPanGestureRecognizer *)recognizer

{

    CGRect rx = [ UIScreen mainScreen ].bounds;

    CGPoint translation = [recognizer translationInView:self.view];

    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,

                                         recognizer.view

.center.y + translation.y);

    [recognizer setTranslation:CGPointZero inView:self.view];

if (recognizer.state == UIGestureRecognizerStateEnded) {

        CGPoint velocity = [recognizer velocityInView:backgroundScrollView];

        CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y

* velocity.y));

        CGFloat slideMult = magnitude / 200;

        NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult);

        float slideFactor = 0.1 * slideMult; // Increase for more of a slide

        CGPoint finalPoint = CGPointMake(recognizer.view.center.x + (velocity.x * slideFactor),

                                         recognizer.view.center.y + (velocity.y * slideFactor));

//x > 控制元件寬*1/2 && x < screen.size.width - 控制元件寬*1/2y同理

        finalPoint.x = MIN(MAX(finalPoint.x, 10), rx.size.width - 10);

        finalPoint.y = MIN(MAX(finalPoint.y, 64 + 10), rx.size.height - 49 - 10);

        [UIViewanimateWithDuration:0.05*slideMult delay:0options:UIViewAnimationOptionCurveEaseOutanimations:^{

            recognizer.view.center = finalPoint;

        } completion:nil];

    }

}