Search code examples
iosxcodedragtouchesbegantouchesmoved

TouchesMoved only moves a little


I am trying to allow the user to drag a label around the screen, but in the simulator it only moves a little each time I touch somewhere on the screen. It will jump to the location and then drag slightly, but then it will stop dragging and I have to touch a different location to get it to move again. Here is my code in my .m file.

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

    firstInitial.center = [Drag locationInView: self.view];

}

My ultimate goal is to be able to drag three different labels on the screen, but I'm just trying to tackle this problem first. I would greatly appreciate any help!

Thanks.


Solution

  • Try using a UIGestureRecognizer instead of -touchesMoved:withEvent:. And implementing something similar to the following code.

    //Inside viewDidLoad
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragonMoved:)];
    panGesture.minimumNumberOfTouches = 1;
    [self addGestureRecognizer:panGesture];
    //**********
    
    - (void)dragonMoved:(UIPanGestureRecognizer *)gesture{
    
        CGPoint touchLocation = [gesture locationInView:self];
        static UIView *currentDragObject;
    
       if(UIGestureRecognizerStateBegan == gesture.state){
    
            for(DragObect *dragView in self.dragObjects){
    
                if(CGRectContainsPoint(dragView.frame, touchLocation)){
    
                    currentDragObject = dragView;
                    break;
                }
            }
    
    
        }else if(UIGestureRecognizerStateChanged == gesture.state){
    
            currentDragObject.center = touchLocation;
    
        }else if (UIGestureRecognizerStateEnded == gesture.state){
    
            currentDragObject = nil;
    
        }
    
    }