Question

I've created a 200x200 circle in a custom UIView. I am using the following script to move the view object around the screen on the iPad.

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{    
UITouch *touch = [touches anyObject];   
CGPoint currentPoint = [touch locationInView:self.view];

if([touch view] == newShape)
{
    newShape.center = currentPoint;
}

[self.view setNeedsDisplay];
}

Everything works fine, I can move the circle anywhere on the screen. However, if I don't touch dead center on the circle object, it jumps slightly. By reading the code, this is quite obvious because newShape.center is being set to wherever the touch happens and ultimately snapping quickly to that position.

I'm looking for a way to move an object without snapping to the touch position. I'm thinking I would use xy coordinates to achieve this, but I'm not sure how to implement it.

Thanks!

Was it helpful?

Solution

Declare CGPoint prevPos; in .h file.

Here my view is _rectView.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];   
    CGPoint currentPoint = [touch locationInView:self.view];
    prevPos = currentPoint;
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];   
    CGPoint currentPoint = [touch locationInView:self.view];

    if([touch view] == _rectView)
    {
        float delX =  currentPoint.x - prevPos.x;
        float delY = currentPoint.y - prevPos.y;
        CGPoint np = CGPointMake(_rectView.frame.origin.x+delX, _rectView.frame.origin.y+delY);
        //_rect.center = np;
        CGRect fr = _rectView.frame;
        fr.origin = np;
        _rectView.frame = fr;
    }

    //[self.view setNeedsDisplay];

    prevPos = currentPoint;
}

Use the above code. You will not get that 'jump' effect.

OTHER TIPS

An obvious way to do it is to store the offset of the touch from the shape's center in -touchesBegan:withEvent: and apply the offset in -touchesMoved:withEvent:.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top