【发布时间】:2014-06-19 03:20:08
【问题描述】:
我正在尝试围绕 UIButton 构建动画。 UIButton 有一个 UIImageView,其中包含一个图像,当 UIButton 被按住时我想缩小它,然后当 UIButton 松开时,我想播放一个单独的动画来执行反弹。
我现在遇到的问题是,如果我快速按下然后快速按下,动画的第二部分似乎没有播放。如果我按住(等待第一个动画完成),然后松开,它似乎工作正常。
以下是相关代码:
-(void)pressedDown
{
[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.heartPart.layer.transform = CATransform3DMakeScale(0.8, 0.8, 1);
} completion:nil];
}
-(void)pressedUp
{
[UIView animateWithDuration:0.8
delay:0.0
usingSpringWithDamping:20
initialSpringVelocity:200
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.heartPart.layer.transform = CATransform3DIdentity;
}
completion:nil];
}];
}
在我的ViewDidLoad 中添加以下内容:
[self.heartButton addTarget:self
action:@selector(pressedUp)
forControlEvents:UIControlEventTouchUpInside];
[self.heartButton addTarget:self
action:@selector(PressedDown)
forControlEvents:UIControlEventTouchDown];
知道如何让两个动画按顺序排列并且即使在快速按下时也不会互相打断?
【问题讨论】:
-
您的意思是希望第一个动画在第二个动画开始之前完成,即使您快速触摸一下?
-
是的,现在似乎第二个动画根本没有触发,因为第一个动画还没有完成。
-
你真的需要第二个动画在用户抬起手指之前不开始吗?无论如何,人们似乎不会长时间保持触摸,在这种情况下,您只能有一个方法,并将第二个动画添加到第一个动画的完成块中......
-
在按钮中抬起手指会在服务器上提交某些内容,因此我想播放更响亮的动画。如果您将手指从按钮上移开,那么我希望它取消(标准按钮行为)。这不是必需的,但这是我希望做的一个很好的接触。 :)
-
链接动画的方式有很多种。最明显的是有一个序列号
NSOperationQueue。这样,您甚至可以取消尚未运行的动画,并在用户快速来回移动手指时安排新的动画。请记住,动画必须在主线程上调度,而NSOperations只会分拆并等待动画完成。
标签: ios objective-c animation uibutton