Search code examples
objective-cios5ios6uiimageviewuipangesturerecognizer

moving a UIImageView one at a time using UIPanGestureRecognizer


I have some questions about using a UIPanGestureRecognizer. Is it possible to use it in moving a UIImageView one at a time.

The flow is like this. I have 2 images. image A and B. If you select image A,image B cannot be moved?.

Thanks guys.


Solution

  • you can set UIPanGestureRecognizer for particular UIImageView object only.

        //set UIPanGestureRecognizer for first image
        UIPanGestureRecognizer *panRecognizer1 = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveImage1:)];
        [panRecognizer1 setMinimumNumberOfTouches:1];
        [panRecognizer1 setMaximumNumberOfTouches:1];
        [panRecognizer1 setDelegate:self];
        [img1 addGestureRecognizer:panRecognizer1];
    
        //set UIPanGestureRecognizer for second image
        UIPanGestureRecognizer *panRecognizer2 = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveImage2:)];
        [panRecognizer2 setMinimumNumberOfTouches:1];
        [panRecognizer2 setMaximumNumberOfTouches:1];
        [panRecognizer2 setDelegate:self];
        [img1 addGestureRecognizer:panRecognizer2];
    

    and write two method for image moving

        -(void)moveImage1:(id)sender {
                //coding for moving first image
                [[[(UITapGestureRecognizer*)sender view] layer] removeAllAnimations];
                [viewGesture bringSubviewToFront:[(UIPanGestureRecognizer*)sender view]];
                CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];
    
                if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
                        firstX = [[sender view] center].x;
                        firstY = [[sender view] center].y;
                }
    
                translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);
                [[sender view] setCenter:translatedPoint];
    
                if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
    
    
                        CGFloat finalX = translatedPoint.x + (.04*[(UIPanGestureRecognizer*)sender velocityInView:viewGesture].x);
                        CGFloat finalY = translatedPoint.y + (.04*[(UIPanGestureRecognizer*)sender velocityInView:viewGesture].y);
    
                        if(UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
    
                                if(finalX < -5000) {              finalX = 0;       }
                                else if(finalX > 5000) {          finalX = 320;     }
    
                                if(finalY < -5000) {         finalY = 0;             }
                                else if(finalY > 5000) {     finalY = 460;           }
                        }
                        else {
                                if(finalX < -5000) {   finalX = 0;    }
                                else if(finalX > 5000) {  finalX = 320;}
    
                                if(finalY < -5000) {         finalY = 0;             }
                                else if(finalY > 5000) {     finalY = 460;        }
                        }
    
                        [UIView beginAnimations:nil context:NULL];
                        [UIView setAnimationDuration:.35];
                        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
                        [[sender view] setCenter:CGPointMake(finalX, finalY)];
                        [UIView commitAnimations];
                }
        }
    
        -(void)moveImage2:(id)sender {
                //coding for moving second image
        }
    

    and also see this with uicollectionview