0

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

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

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

非常感谢 !

4

2 回答 2

1

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

将中心动画到您的点击位置

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

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

于 2011-06-21T14:32:26.833 回答
1

当您按下手指时保存点

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

-(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;
}
于 2012-08-17T19:56:33.027 回答