перетаскивание iphone странное скачкообразное движение - PullRequest
0 голосов
/ 25 января 2012

В настоящее время я создаю интерактивную функцию анаграммы для своего приложения для iPad и пытаюсь использовать события сенсорного перемещения, чтобы выбранный элемент плавно следовал за движением, но по какой-то странной причине он прыгает.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    NSString *touchClass = [NSString stringWithFormat:@"%@",[[touch view] class]];

    if ([touchClass isEqualToString:[NSString stringWithFormat:@"%@",[AnagramLetter class]]]) {
        NSLog(@"start moving");
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    NSString *touchClass = [NSString stringWithFormat:@"%@",[[touch view] class]];
    CGPoint location = [touch locationInView:touch.view];
    if ([touchClass isEqualToString:[NSString stringWithFormat:@"%@",[AnagramLetter class]]]) {
        NSLog(@"touch view centre (x,y) - (%f,%f)",touch.view.center.x,touch.view.center.y);
        NSLog(@"location (x,y) - (%f,%f)",location.x,location.y);
        touch.view.center = location;
    }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    NSString *touchClass = [NSString stringWithFormat:@"%@",[[touch view] class]];

    if ([touchClass isEqualToString:[NSString stringWithFormat:@"%@",[AnagramLetter class]]]){
        NSLog(@"Now stop moving!");
    }
}

Выше приведены мои 3 сенсорных метода, и кажется, что они должны работать нормально.Вы можете увидеть в методе touchesMoved, который я проверяю, для определения, является ли перемещаемый объект определенного класса (пользовательский класс, который я создал для того же проекта).У кого-нибудь есть идеи, почему это может происходить?Он следит за курсором в симуляторе, но, кажется, привязывается к нижнему углу, прежде чем он следует за курсором, поэтому он в основном прыгает по всему экрану.

Есть идеи?

1 Ответ

1 голос
/ 25 января 2012

Я полагаю, что проблема в том, что вы работаете с касанием по отношению к затрагиваемому подпредставлению.

[touch locationInView:[touch.view superview]];

даст вам местоположение относительно родителя вашего пользовательского представления.

В методе touchesMoved вы можете посмотреть смещение и применить то же смещение к вашему виду

if ([touchClass isEqualToString:[NSString stringWithFormat:@"%@",[AnagramLetter class]]]) {
        UITouch * touch = [touches anyObject];
        CGPoint previous = [touch previousLocationInView:[touch.view superview]];
        CGPoint current = [touch locationInView:[touch.view superview]];
        CGPoint displacement = CGPointMake(current.x - previous.x, current.y - previous.y);

        CGPoint center = touch.view.center;
        center.x += displacement.x;
        center.y += displacement.y;
        touch.view.center = center;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...