相对于手指拖动UIVIew

时间:2011-06-21 14:29:56

标签: ios uiview coordinates drag touchesmoved

我有点问题。 我有一些UIView,我可以使用touchesBegan和touchesMoved方法拖动它们。

我的问题是我的UIView的坐标(0,0)正在我手指下。我想避免这种情况。

你知道怎么做吗?我尝试了一些但没有成功的事情:(

非常感谢!

2 个答案:

答案 0 :(得分:1)

这取决于视图的大小,但您可以将center属性设置为触摸的位置。

将中心设置为点击位置

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

您可以使用所有touches*方法将视图设置为当前触摸的动画,而不仅仅是移动位置或翻译它。

答案 1 :(得分:0)

按下手指时保存点

然后测量拖动的速度,并将速度应用到视图的位置(我用我的例子中的原点翻译我的视图)

-(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;
}