Предотвратить прыжок видимого объекта при движении пальцем - PullRequest
0 голосов
/ 14 ноября 2011

Я создал круг размером 200x200 в пользовательском UIView. Я использую следующий скрипт для перемещения объекта просмотра по экрану на 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 ]

2 голосов
/ 14 ноября 2011

Объявление 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;
}

Используйте вышеуказанный код. Вы не получите эффект «прыжка».

0 голосов
/ 14 ноября 2011

Очевидный способ сделать это - сохранить смещение касания от центра фигуры в -touchesBegan:withEvent: и применить смещение в -touchesMoved:withEvent:.

...