Ab'initio
Ab'initio

Reputation: 5418

Move image with touch

I have a scroll view with a fixed number of thumbnail images added as subview. I want to move these images along touch to the rectangle in another view. I am able to move the image along scrollview (ie, along the same view) but not able to move across another view. Now am changing the center of image depending on touch position. When touch point increases beyond the frame of scrollview the image disappears. This is my problem

 - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [[event allTouches] anyObject];

        CGPoint location = [touch locationInView: self];
        NSLog(@"%f,%f",location.x,location.y);
        touch.view.center = location;

    }

Any solution to this problem will be a great help for me !!!

Please refer image for further details enter image description here

Upvotes: 0

Views: 390

Answers (1)

rdurand
rdurand

Reputation: 7410

Here is what I'd do :

Add a panGestureRecognizer to each image, with the following handlePan: method as its action. You still have to figure out how to get the correct imageView (myImageView), but this will make your image follow your finger.

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

    // Find the correct image you're dragging
    // UIImageView *myImageview = ...

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

    if (recognizer.state == UIGestureRecognizerStateEnded) {
        // What to do when you start the gesture
        // You may also define myImageView here
        // (if so, make sure you put it in @interface,
        // because this method will be called multiple times,
        // but you will enter this "if" only when you start the touch)
    }

    // Keep your image in the screen
    if (myImageView.frame.origin.x + translation.x >= 0.0f &&
        myImageView.frame.origin.x + myImageView.frame.size.width + translation.x <= 320.0f &&
        myImageView.frame.origin.y + translation.y >= 0.0f &&
        myImageView.frame.origin.y + myImageView.frame.size.height + translation.y <= 480.0f) {

        myImageView.center = CGPointMake(myImageView.center.x + translation.x, 
                                         myImageView.center.y + translation.y);

    }

    if (recognizer.state == UIGestureRecognizerStateEnded) {
        // What to do when you remove your finger from the screen
    }

    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}

Upvotes: 1

Related Questions