用手指触摸移动时防止视图对象跳跃

时间:2011-11-14 04:43:22

标签: objective-c ios uiview touchesmoved

我在自定义UIView中创建了一个200x200的圆圈。我使用以下脚本在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];
}

一切正常,我可以将圆圈移动到屏幕上的任何位置。但是,如果我没有触摸圆形物体上的死点,它会略微跳跃。通过阅读代码,这是非常明显的,因为newShape.center被设置为触摸发生的任何地方,并最终快速捕捉到该位置。

我正在寻找一种移动物体而不会咬合到触摸位置的方法。我想我会使用xy坐标来实现这一点,但我不确定如何实现它。

谢谢!

2 个答案:

答案 0 :(得分:2)

在.h文件中声明CGPoint prevPos;

我的观点是_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;
}

使用上面的代码。你不会得到那种“跳跃”效果。

答案 1 :(得分:0)

一种显而易见的方法是在-touchesBegan:withEvent:中存储形状中心的触摸偏移量,并在-touchesMoved:withEvent:中应用偏移量。