Search code examples
iosuiimageviewuitouchtouchesbegantouchesmoved

TouchesMoved with UITouch


I'm trying to create a simple application where you can move your UIImageView by touching him and dragging him around.

my UIImageView is called imv

-(void ) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch * touch = [touches anyObject];

if([touch view] == self.imv){
    CGPoint location = [touch locationInView:self.view];
    self.imv.center = location;

}
}

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

if([touch view] == self.imv){
    CGPoint location = [touch locationInView:self.view];
    self.imv.center = location;

}
}

i'am trying to solve this like whole day and i don't know what is wrong. If i disable if statement it's working else not. What can i do?

Thanks for the answers


Solution

  • Unless you've subclassed UIImageView (unlikely), your view is receiving the touch events.

    These days it's simpler & more usual to use a UIGestureRecognizer for this kind of thing, in this case a UIPanGestureRecognizer.

    e.g.

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragImageView:)];
    [self.imv addGestureRecognizer:pan];
    
    
    - (void)dragImageView:(UIPanGestureRecognizer *)dragImageView {
        if(UIGestureRecognizerStateBegan  == state) {
            originalCenter = self.imv.center;    // add CGPoint originalCenter; member
        } else if(UIGestureRecognizerStateChanged == state) {
            CGPoint translate = [pan translationInView:self.imv.superview];
            self.imv.center = CGPointMake(originalCenter.x + translate.x, originalCenter.y + translate.y);
        }
    }