3

2 番目のアニメーションを呼び出した後、1 つのアニメーションを永久に継続させるにはどうすればよいですか? 例えば:

1) 物体を脈動させ始める 2) 脈動しながら動かす 3) 脈動し続ける

2番目のアニメーションが最初のアニメーションを無期限に停止することを除いて、すべてが機能します。以下はサンプルコードです。

//Pulsate **

        [UIView animateWithDuration:0.25
                              delay:0
                            options: (UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat)
                         animations:^{
                             CGAffineTransform currentTransform = self.transform;
                             CGAffineTransform newTransform1 = CGAffineTransformScale(currentTransform, .95, .95);
                             [self setTransform:newTransform1];
                             CGAffineTransform newTransform2 = CGAffineTransformScale(currentTransform, 1, 1);
                             [self setTransform:newTransform2];
                         } 
                         completion:nil];    


//Move **
     [UIView animateWithDuration:0.30
                      delay:0
                    options: (UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState )
                 animations:^{
                     [[(UIPinchGestureRecognizer*)sender view] setCenter:CGPointMake(myAppDelegate.MCViewReference.center.x-300, myAppDelegate.MCViewReference.center.y)];
                 } 
                 completion:^(BOOL finished){
                }];    
4

2 に答える 2

5

ここにあるように、ブロックベースのアニメーションでこれを行うことはできません。で明示的なアニメーションを使用して、アニメーションを分割する必要がありますCABasicAnimation。脈動効果のアニメーションを 1 つ作成し、無限に繰り返すように設定します。次に、中心を設定することで(アニメーションまたは非アニメーションのいずれかで)移動できます。

CABasicAnimation *pulsation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
pulsation.fromValue = [NSNumber numberWithFloat:0.95f];
pulsation.toValue = [NSNumber numberWithFloat:1.f];
pulsation.duration = 0.25f;
pulsation.autoreverses = YES;
pulsation.repeatCount = INFINITY;

[self.layer addAnimation:pulsation forKey:@"pulse"];

レイヤーにアニメーションを追加するとすぐに、アニメーションが開始されます。アニメーションを削除するには、単に[self.layer removeAnimationForKey:@"pulse"またはを呼び出しますremoveAllAnimations:

于 2012-04-10T22:04:35.347 に答える
1

アニメーションをフェーズに分割し、完了ブロックを使用して次のフェーズを開始できます。

于 2012-04-10T19:49:07.800 に答える