2011-06-21 78 views
0

我有一個小問題。 我有一些UIView,我可以用方法touchesBegan和touchesMoved拖動它們。相對於手指拖動UIVIew

我的問題是我的UIView的座標(0,0)正在我的手指下。我想避免這種情況。

你知道該怎麼做。我嘗試一些東西,但沒有成功:(

非常感謝!

回答

1

這將取決於該視圖的大小,但你也許可以設置center屬性爲您的觸摸位置。

動畫效果只是移動位置或轉換它的中心,你的抽頭位置

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

相反,你可以認爲動畫到您當前的觸摸中的所有touches*種方法。

+0

這會造成「跳躍」的效果。我希望看到的是我第一次用膠帶粘貼的位置。 – Pierre

+0

哦,所以你想動畫到你的位置? –

+1

難道你不能簡單地計算初始觸摸和中心之間的差異,並從touchesMoved值減去它? – Jake

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