Перетащите UIVIew относительно пальца - PullRequest
0 голосов
/ 21 июня 2011

У меня маленькая проблема.У меня есть некоторые UIView, и я могу перетащить их с помощью методов touchesBegan и touchesMoved.

Моя проблема в том, что координаты моего UIView (0,0) находятся под моим пальцем.Я бы хотел этого избежать.

Ты знаешь, как это сделать.Я пробую кое-что, но безуспешно: (

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 17 августа 2012

когда вы нажимаете пальцем, сохраняете точку

, затем измеряете скорость перетаскивания и применяете скорость к положению вашего вида (я перевожу свой вид с началом координат в моем примере)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSUInteger touchCount = [touches count];
    NSUInteger tapCount = [[touches anyObject] tapCount];
    NSLog(@"touchesBegan");
    NSLog(@"%d touches", touchCount);
    NSLog(@"%d taps", tapCount);

    UITouch *touch = [touches anyObject];
    pNow = [touch locationInView:self];
    pLast = [touch locationInView:self];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    NSUInteger touchCount = [touches count];
    NSUInteger tapCount = [[touches anyObject] tapCount];
    NSLog(@"touchesMoved");
    NSLog(@"%d touches", touchCount);
    NSLog(@"%d taps", tapCount);

    UITouch *touch = [touches anyObject];
    pNow = [touch locationInView:self];

    mouseSpeed.x = pNow.x - pLast.x;
    mouseSpeed.y = pNow.y - pLast.y;
    NSLog(@"mouseSpeed : %f, %f", mouseSpeed.x, mouseSpeed.y);

    origin.x += mouseSpeed.x;
    origin.y += mouseSpeed.y;
    NSLog(@"origin : %f, %f", origin.x, origin.y);

    //copy point for the next update
    pLast = pNow;
}
1 голос
/ 21 июня 2011

Это будет зависеть от размера представления, но вы, вероятно, можете установить свойство center в соответствии с местоположением вашего касания.

Анимация центра к вашему местоположению касания

[UIView animateWithDuration:0.25f
                      delay:0.0f
                    options:(UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseInOut)
                 animations:^{
                     theView.center = tapLocation;
                 }
                 completion:NULL]

Вместо того, чтобы просто перемещать местоположение или переводить его, вы можете анимировать представление к текущему касанию всеми touches* методами.

...