1

画面にスライドしたり、画面からスライドしたりするために、テキストが表示されたバブルをアニメーション化することを検討しています。このアニメーションの理想的な実装は、ページングが有効になっているiOSの水平スクロールです。ふきだしの終わりに達したときの「バウンス」が絶対に必要です。ふきだしが画面からスライドする前に、特定のポイントまで指を追跡することを明確に望んでいます。これはスワイプ(一方向にフリックするだけ)と同じではないと思います。

ただし、水平スクロールの問題は、静的な数の画像に対して最適化されていることです。動的な数の画像がありますが、私が知る限り、水平スクロールに画像を動的に追加することはできません。アイデアは、あなたがそれを進め続けるにつれて、アプリが動的にコンテンツをスクローラーに追加するということです。

スクローラーは簡単に操作できましたが、今から分解する必要があります。アニメーションだけでなく、ジェスチャ(この時点で標準のジェスチャレコグナイザーが機能するかどうかはわかりません)を開始するにはどうすればよいですか?私はこれまでiOSコードのその部分を扱ったことがありません。

4

1 に答える 1

3

あなたの質問に完全に従うかどうかはわかりませんが、ジェスチャーに基づいて何かの動きをアニメートしたい場合は、を使用して、任意のサブビューUIPanGestureRecognizerのを変更できます。centerたとえば、次のようになりviewDidLoadます。

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(movePiece:)];
[whateverViewYouWantToAnimate addGestureRecognizer:panGesture];

次に、ジェスチャレコグナイザで好きな場所に移動させることができます。

- (void)movePiece:(UIPanGestureRecognizer *)gestureRecognizer
{
    static CGPoint originalCenter;

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan)
    {
        originalCenter = [gestureRecognizer view].center;
    }
    else if (gestureRecognizer.state == UIGestureRecognizerStateChanged)
    {
        CGPoint translation = [gestureRecognizer translationInView:self.view];

        gestureRecognizer.view.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y);

        // if you wanted to animate both left/right and up/down, it would be:
        // gestureRecognizer.view.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y + translation.y);
    }
    else if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
    {
        // replace this offscreen CGPoint with something that makes sense for your app

        CGPoint offscreen = CGPointMake(480, gestureRecognizer.view.center.y);

        [UIView animateWithDuration:0.5
                         animations:^{
                             gestureRecognizer.view.center = offscreen;
                         }
                         completion:^(BOOL finished){
                             // when you're done, you might want to do whatever cleanup
                             // is appropriate for your app (e.g. do you want to remove it?)
                             [gestureRecognizer.view removeFromSuperview];
                         }];
    }
}
于 2012-09-28T21:08:00.060 に答える