2010-12-18 103 views
1

我有一個UIView,我想動畫到用戶的手指現在的位置。總是動畫UIView動畫到用戶的水龍頭位置

所以,當觸摸開始時,它必須爲水龍頭位置設置動畫。

觸摸移動時,必須將其目標調整到新的位置。

當觸摸結束時,它必須完成動畫到最後一個水龍頭位置。

我嘗試了幾件事,但都沒有解決。我試圖在touchesMoved中用startsFromCurrentState創建一個新的動畫,但那不起作用。

回答

0

需要關於此的一些更多詳細信息..但是您確定您從相應的視圖(即不是您想要移動的視圖)使用touchesBegan,touchesMovedtouchesEnded?還請確保userInteractionEnabled = YES。嘗試記錄從touchesBegan觸摸,以確保您正在接受觸摸。

或者您可能只想看看蘋果MoveMe示例代碼https://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.html他們已經爲您解決了所有這些問題。

+0

MoveMe示例並不完全是我想要的。 MoveMe顯示可拖動的視圖。我需要一個遵循用戶位置的視圖。這不是真的一樣。 – Rits 2010-12-19 16:46:49

+0

是的,'touchesBegan'等方法都可以調用,問題是我不知道如何設置正確的動畫,以便導致我想要的行爲。 – Rits 2010-12-19 16:47:22

+0

MoveMe和你想要做什麼之間的區別? – 2010-12-21 06:19:47

5

看來你讓這個有點複雜。如果您正在實施touchesMoved,則需要拖動。如果你對水龍頭更感興趣,那麼touchesEnded就是你想要實現的地方。無論哪種方式,您只需要查看位置並根據該位置更新您的UIView中心。如果將更改包裝到UIView動畫塊中的中心值,它將在更新時動畫到該位置。

如果您使用的是iOS 3.2或更高版本,可以使用手勢識別器,這使得這個非常容易的:

// In viewDidLoad or some such 
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] 
         initWithTarget:self action:@selector(viewWasTapped:)]; 
[[self view] addGestureRecognizer:tapRecognizer]; 

然後宣告你的行動選擇:

- (void)viewWasTapped:(UITapGestureRecognizer*)recognizer 
{ 
    CGPoint location = [recognizer locationInView:[self view]]; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.0f]; // take a second to animate 
    [viewToMove setCenter:location]; 
    [UIView commitAnimations]; 
} 

這將動畫從視圖一個位置到另一個位置這被稱爲隱式動畫。使用核心動畫類,如CAKeyframeAnimation或CABasciAnimation將是顯式動畫。