0

振動アニメーションで画面に入るビューが必要です。最後に、アニメーションは自然な方法で停止する必要があります(振動の減少 - 振り子効果)。必要に応じてビューが画面に回転するように、画面の上にサブビューを追加しました。サブビューを追加するコードは次のとおりです。

myView.layer.anchorPoint = CGPointMake(1.0, 0.0);

[[self view] addSubview:myView];
[myView setHidden:YES];
// Rotate 75 degrees to hide it off screen
CGAffineTransform rotationTransform = CGAffineTransformIdentity;
rotationTransform = CGAffineTransformRotate(rotationTransform, DEGREES_RADIANS(75));
bannerView.transform = rotationTransform;
bannerView.center = CGPointMake(((self.view.bounds.size.width)/2.0), -5.0);

[self performSelector:@selector(animateSwing) withObject:nil afterDelay:3.0];

私がこれを達成しようとしている方法は、ビューが完全な半円を 1 回回転して逆回転し、次に半円を 1 回回転し、最終的に EaseOut アニメーション カーブを使用して目的のポイントで停止することです。私のメソッドのコードをanimateSwing()以下に示します。

- (void)animateSwing {
     NSLog(@"ANIMATING");
    [myView setHidden:NO];
    CGAffineTransform swingTransform = CGAffineTransformIdentity;
    swingTransform = CGAffineTransformRotate(swingTransform, DEGREES_RADIANS(-20));


    [UIView animateWithDuration:0.30
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     [UIView setAnimationRepeatCount:1.5];
                     [UIView setAnimationRepeatAutoreverses:YES];  
                     myView.transform = swingTransform;

                 }completion:^(BOOL finished){
                     [UIView animateWithDuration:0.10
                                           delay:0.0
                                         options:UIViewAnimationOptionCurveEaseOut
                                      animations:^{
                                          myView.transform = CGAffineTransformMakeRotation(DEGREES_RADIANS(0));
                                      }completion:^(BOOL Finished){

                                      }];

    }]; 
}

何らかの理由で、上記のコードが機能しません。アニメーションを連鎖させない場合、コードは半円ルーチンを実行します。しかし、上記のようにアニメーションをチェーンすると、目的のポイントの周りで少し振動し、突然終了します。

このコードの修正を提案するか、必要なアニメーションを実装する方法を提案してください

ありがとう

4

1 に答える 1