4

我有三个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

一种解决方案是将 button2 和 button3 都设置为另一个中的子视图,UIView并分别为视图而不是每个按钮设置动画。这是否是一种好方法取决于您尝试使用堆叠按钮完成的任务。

编辑:

由于我的经验是块内的动画是同步的,所以我实现了如下所示的代码。我为动画持续时间尝试了许多值(0.15、0.25、0.75、1.25),并且按钮 2 和按钮 3 同步移动(由于按钮 2 在按钮 3 的顶部,我实际上根本看不到按钮 3,直到我点击按钮 2 ,这会导致按钮 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 回答