0

iPad アプリケーションの一部のアニメーションに問題があります。アプリの起動時に画面に表示される 4 つの UIButtons があります。

私は基本的に、アプリをロードし、4 つのボタンを画面の上部から一度に 1 つずつ表示するようにアニメーション化する必要があります。

私はそれをアニメーション化する次のものを持っていますが、私はそれに苦労しています。

-(void)viewWillAppear:(BOOL)animated
{
    CGPoint newLeftCenter = CGPointMake( 15.0f + myCocoButton.frame.size.width / 2.0f, myCocoButton.center.y);
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:4.0f];
    myCocoButton.center = newLeftCenter;
    [UIView commitAnimations];

}

私が持っている現在のコードはボタンをアニメーション化しますが、私が望む方法ではありません。実際に必要な場所に正確に配置する方法について頭を悩ませることはできません。

4

3 に答える 3

2

ボタンが配列にあると仮定すると、次のようなことができます(アイテムはペン先の正しい終了位置にある必要があります)

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    CGAffineTransform transform = CGAffineTransformMakeTranslation(0.f, -200.f); 

    [self.buttons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop) {

       button.transform = transform; // This translates the view's off the top of the screen

       [UIView animateWithDuration:0.25f
                             delay:0.25f * idx
                           options:UIViewAnimationCurveEaseOut            // No point doing easeIn as the objects are offscreen anyway
                        animations:^{
                            button.transform = CGAffineTransformIdentity;
                      } completion:nil];

       }];
}

これは毎回アニメーション化されます。これが発生しないようにivarを追加し、これが1回実行された後でYESに設定する必要がある場合があります。私がいじり回っていたときに見つけた問題は、呼び出し時viewDidAppear: animatedNO最初のロードであったため、そのBOOLをチェックとして使用できなかったことです。

于 2012-05-03T23:49:54.933 に答える
2

ストーリーボードで、ボタンを最終的な位置に配置します。

viewWillAppear:、各ボタンの位置を保存し、ボタンを画面外に移動します。

@implementation MyViewController {
    CGPoint _button0TrueCenter;
    CGPoint _button1TrueCenter;
    CGPoint _button2TrueCenter;
    CGPoint _button3TrueCenter;
}

static void moveButtonAndSaveCenter(UIButton *button, CGPoint offscreenCenter, CGPoint *trueCenter) {
    *trueCenter = button.center;
    button.center = offscreenCenter;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (animated) {
        moveButtonAndSaveCenter(self.button0, CGPointMake(-100, 100), &_button0TrueCenter);
        moveButtonAndSaveCenter(self.button1, CGPointMake(420, 100), &_button1TrueCenter);
        moveButtonAndSaveCenter(self.button2, CGPointMake(-100, 200), &_button2TrueCenter);
        moveButtonAndSaveCenter(self.button3, CGPointMake(420, 200), &_button3TrueCenter);
    }
}

次に でviewDidAppear:、アニメーション化して元の位置に戻します。

static void animateButton(UIButton *button, CGPoint newCenter, NSTimeInterval delay) {
    [UIView animateWithDuration:.25 delay:delay options:0 animations:^{
        button.center = newCenter;
    } completion:nil];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (animated) {
        animateButton(self.button0, _button0TrueCenter, 0);
        animateButton(self.button1, _button1TrueCenter, 0.2);
        animateButton(self.button2, _button2TrueCenter, 0.4);
        animateButton(self.button3, _button3TrueCenter, 0.6);
    }
}
于 2012-05-03T21:34:50.077 に答える
0

このテーマについてブログ記事を書きました: http://www.roostersoftstudios.com/2011/07/01/iphone-dev-performing-sequential-uiview-animations/

そこにサンプルプロジェクトがあります。

アニメーションを連鎖させるだけで、終了時に次のアニメーションの関数を呼び出すことができます。あなたが抱えている正確な問題について、より具体的に教えていただけますか?

于 2012-05-03T21:15:18.100 に答える