我有三个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.25
到0.75
,按钮不会保持在一起,但它们会以不同的时间间隔开始移动。我已尝试使用Core Animation方法,通过分组动画和其他内容,但尚未找到任何解决方案。
你有什么想法吗?现在我将持续时间保持在0.25
,直到我拿出一些东西。
答案 0 :(得分:7)
一种解决方案是将button2和button3设置为另一个UIView
中的子视图,并分别为每个按钮设置动画,而不是每个按钮。这是否是一种好的方法取决于您使用堆叠按钮尝试完成的任务。
编辑:
由于我的经验是块内的动画是同步的,我实现了如下所示的代码。我为动画持续时间(0.15,0.25,0.75,1.25)尝试了很多值,而button2和button3正在同步移动(因为button2位于button3的顶部,我实际上根本看不到button3,直到我点击button2 ,这会导致button3从按钮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...");
}