1

個別に動作する 2 つのアニメーションがあるとしますが、それらを同時に動作させたいとします。

    public static void SlideAnimation( string name, UIView view, float xOffset, float yOffset, float duration )
    {           
        if ( view != null )
        {
            // ****** Begin Animation ****** //
            UIView.BeginAnimations(name + " SlideAnimation");
            UIView.SetAnimationDuration(duration);
            UIView.SetAnimationDelegate (view);
            CGAffineTransform move = CGAffineTransform.MakeTranslation(xOffset, yOffset);
            CGAffineTransform transforms = move;
            view.Transform = transforms;
            UIView.CommitAnimations();  
            // ****** End Animation ****** //
        }
    }       

    public static void GrowAnimation( string name, UIView view, float xScale, float yScale, float duration )
    {           
        if ( view != null )
        {
            // ****** Begin Animation ****** //
            UIView.BeginAnimations(name + " GrowAnimation");
            UIView.SetAnimationDuration(duration);
            UIView.SetAnimationDelegate (view);
            CGAffineTransform scale = CGAffineTransform.MakeScale(xScale, yScale);
            CGAffineTransform transforms = scale;
            view.Transform = transforms;
            UIView.CommitAnimations();  
            // ****** End Animation ****** //
        }
    }       

上記の 2 つの関数は、どちらも CGAffineTransform を使用するアニメーションのものです。同じビューで同時に正確に実行したいとしましょう。私は、結果を同時にスライドと成長のビューにしたいと考えています。

1.) 私の最初の試みは、1 つのアニメーションを呼び出し、すぐに次のアニメーションを呼び出すことでした。しかし、それは失敗しました。基本的には最初のアニメーションからアニメーションを開始しましたが、次のアニメーションに移ると最初のアニメーションを停止しました。その結果、2 番目のアニメーションのみがアニメーション化され、最初のアニメーションは完全にスキップされました。一度に 1 つのアニメーションしか実行できないかのようです。

2.) 私の 2 番目の試みは、それぞれのアニメーションを独自のスレッド内で呼び出すことでした...これにより、同時にアニメーション化するという目標が達成されましたが、これを行うには本当にマルチスレッドが必要ですか? もっと良い方法があるはず...

PS: CGAffineTransform には、CAKeyFrameAnimation に CAAnimationGroup があるように、ある種のグループ アニメーションがありますか?

前もって感謝します。

4

1 に答える 1

3

1つの変換を作成し、2番目を追加するだけです。

CGAffineTransform composite = CGAffineTransform.MakeTranslation(xOffset, yOffset);
composite.Scale(xScale, yScale)
view.Transform = composite;
于 2012-12-07T17:34:42.217 に答える