2010-12-18 11 views
1

ユーザーの指が現在ある位置にアニメートするUIViewがあります。UIViewを常にユーザーのタップ位置にアニメーション化します

タッチが始まると、タップの位置にアニメートする必要があります。

タッチが動くと、その場所を新しい場所に調整する必要があります。

タッチが終了すると、最後のタップ位置までアニメーションを終了する必要があります。

私はいくつかのことを試みましたが、うまくいきませんでした。 beginFromCurrentStateをtouchesMovedにして新しいアニメーションを作成しようとしましたが、それもうまくいきませんでした。

答えて

0

さらに詳しい情報が必要です。ただし、適切なビュー(移動したいビューではない)からtouchesBegantouchesMovedtouchesEndedを使用していますか? userInteractionEnabled = YESも確認してください。 touchesBeganからの接触を記録して接触を受けていることを確認してください。

またはApple MoveMeのサンプルコードhttps://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.htmlでサンプルコードをチェックして、それらの問題を解決してください。

+0

MoveMeのサンプルは、私が欲しいものではありません。 MoveMeはドラッグ可能なビューを表示します。私は、ユーザーの場所にちょうど従うビューが必要です。それは本当に同じではありません。 – Rits

+0

そして、 'touchesBegan'などのメソッドがすべて呼ばれてしまいました。問題は正しいアニメーションを設定する方法がわからないため、私が必要とする動作になります。 – Rits

+0

MoveMeとあなたがやりたいことの違いは何ですか? –

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などのCore Animationクラスを使用すると、明示的なアニメーションになります。

関連する問題