4

私はこの非常識なコードを持っています。これをCoreAnimationでアニメーション化して、コードを大幅に減らすにはどうすればよいですか?「小刻みに動く」アニメーションを実行するためのコードをいくつか見つけましたが、それは3Dであり、ビューを左右に移動させたいだけです。アニメーションを左右にバウンドさせたくありません。

[UIView animateWithDuration:0.1f
                 animations:^{
                     CGRect frame = tableView.frame;
                     frame.origin.x -= 4;
                     tableView.frame = frame;
               } completion:^(BOOL finished) {
                   [UIView animateWithDuration:0.1f
                                    animations:^{
                                        CGRect frame = tableView.frame;
                                        frame.origin.x += 4;
                                        tableView.frame = frame;
                                  } completion:^(BOOL finished) {
                                        [UIView animateWithDuration:0.1f
                                                         animations:^{
                                                             CGRect frame = tableView.frame;
                                                             frame.origin.x -= 4;
                                                             tableView.frame = frame;
                                                       } completion:^(BOOL finished) {
                                                             [UIView animateWithDuration:0.1f
                                                                              animations:^{
                                                                                  CGRect frame = tableView.frame;
                                                                                  frame.origin.x = 0;
                                                                                  tableView.frame = frame;
                                                                            } completion:^(BOOL finished) {
                                                                                  // Nothing
                                                                            }
                                                              ];
                                                       }
                                        ];
                                  }
                    ];
               }
];
4

2 に答える 2

8

誰かがつまずいた場合に備えて、この質問をフォローアップしたいと思いました。現在、キーフレームを使用しています。

-(void)wiggleView {
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
    animation.keyPath = @"position.x";
    animation.values = @[ @0, @8, @-8, @4, @0 ];
    animation.keyTimes = @[ @0, @(1 / 6.0), @(3 / 6.0), @(5 / 6.0), @1 ];
    animation.duration = 0.4;
    animation.additive = YES;
    [self.layer addAnimation:animation forKey:@"wiggle"];
}
于 2014-06-20T15:10:45.760 に答える
0

この質問は、繰り返しモーションアニメーションを実行するための非常に簡潔な方法です。回転ウィグルに使用しましたが、任意の変換を適用できます。場合によっては、平行移動を適用できます。

于 2012-07-10T19:54:11.543 に答える