4

3 つのUIButtonオブジェクトが視覚的に重なり合っています。ユーザーがボタンをタップすると、下のボタンが一定の距離だけ下に移動する必要があります。次のアニメーション ブロックを使用しています。

// Assuming button 1 was clicked...
[UIView animateWithDuration:0.25f
                      delay:0.0f
                    options:UIViewAnimationOptionCurveLinear
                 animations:^(void) {
                   self.button2.frame = CGRectOffset(self.button2.frame, 0.0f, 20.0f);
                   self.button3.frame = CGRectOffset(self.button3.frame, 0.0f, 20.0f);
                 }
                 completion:^(BOOL finished) { NSLog(@"Finished"); }];

アニメーションの継続時間を から に増やす0.250.75、ボタンは一緒にとどまらず、異なる時間間隔で動き始めます。アニメーションやその他のものをグループ化することで、Core Animation メソッドを試しましたが、まだ解決策が見つかりません。

あなたはなにか考えはありますか?今は0.25何か思いつくまで期間を空けています。

4

1 に答える 1

7

1 つの解決策は、button2 と button3 の両方を別のサブビューとして設定しUIView、各ボタンを個別にアニメーション化するのではなく、ビューをアニメーション化することです。これが適切なアプローチであるかどうかは、スタック ボタンで何を達成しようとしているかによって異なります。

編集:

私の経験では、ブロック内のアニメーションは同期しているので、以下に示すようにコードを実装しました。アニメーションの継続時間 (0.15、0.25、0.75、1.25) に多数の値を試してみましたが、button2 と button3 は同期して移動しています (button2 は button3 の上にあるため、button2 をタップするまで実際には button3 をまったく見ることができません)これにより、ボタン 3 がボタン 3 の下から移動します)。

- (IBAction)button1Tapped:(id)sender {
    NSLog(@"button1Tapped...");

    [UIView animateWithDuration:0.75f
                          delay:0.0f
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^(void) {
                         self.button2.frame = CGRectOffset(self.button2.frame, 0.0f, 20.0f);
                         self.button3.frame = CGRectOffset(self.button3.frame, 0.0f, 20.0f);
                     }
                     completion:^(BOOL finished) { NSLog(@"Finished"); }];
}

- (IBAction)button2Tapped:(id)sender {
    NSLog(@"button2Tapped...");

    [UIView animateWithDuration:0.75f
                          delay:0.0f
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^(void) {
                         self.button3.frame = CGRectOffset(self.button3.frame, 0.0f, 20.0f);
                     }
                     completion:^(BOOL finished) { NSLog(@"Finished"); }];
}

- (IBAction)button3Tapped:(id)sender {
    NSLog(@"button3Tapped...");
}
于 2013-01-18T15:10:18.083 に答える