0

我在自定义 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 坐标来实现这一点,但我不确定如何实现它。

谢谢!

4

2 回答 2

2

CGPoint prevPos;在 .h 文件中声明。

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

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

于 2011-11-14T05:31:15.937 回答
0

一个明显的方法是将触摸从形状中心的偏移量存储在 in-touchesBegan:withEvent:并应用偏移量 in -touchesMoved:withEvent:

于 2011-11-14T04:54:13.917 回答