我想按住一个按钮 1 秒钟,看着它逐渐变成一种新颜色,直到我松开那个按钮,此时我希望动画取消并返回到原始颜色
我的问题是我还想取消归因于第一个 Action 的完成 block ,以防第二个 Action 发生在第一个 Action 完成之前(用户在按钮完全改变颜色之前释放按钮)
下面的代码是我尝试执行此操作的方式,但无论如何,操作 1 的完成 block 每次都会完成。对于此功能,我应该采取完全不同的路线吗?
- (void)animate1On {
[UIView animateWithDuration:1.0 animations:^{
self.button1.backgroundColor = [UIColor whiteColor];
self.button1.alpha = 0.4;
} completion:^(BOOL finished) {
NSLog(@"ANIMATE ON COMPLETE");
}];
}
- (void)animate1Off {
[UIView animateWithDuration:0.4 animations:^{
[self.button1.layer removeAllAnimations];
self.button1.backgroundColor = [UIColor redColor];
self.button1.alpha = 0.2;
} completion:^(BOOL finished) {
NSLog(@"ANIMATE OFF COMPLETE");
}];
}
下面是我用来创建按钮并分配 touchDown(按住)和 touchupinside(释放)调用的单独代码
self.button1 = [UIButton buttonWithType:UIButtonTypeCustom];
self.button1.frame = button1rect;
self.button1.tag = 100;
[self.button1 setTitle:@"1" forState:UIControlStateNormal];
self.button1.layer.masksToBounds = YES;
self.button1.layer.borderWidth = 0;
self.button1.backgroundColor = [UIColor redColor];
self.button1.alpha = 0.2;
[self.button1 addTarget:self action:@selector(animate1On) forControlEvents:UIControlEventTouchDown];
[self.button1 addTarget:self action:@selector(animate2Off) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.button1];
最佳答案
完成 block 将在动画完成或移除时执行。 finish
bool 标志可以帮助您决定是否应该执行完成 block 中的代码。所以你在 animate1On
中的完成 block 应该如下所示:
completion:^(BOOL finished) {
if (!finished) {
return;
}
NSLog(@"ANIMATE ON COMPLETE");
}
这将确保 NSLog
行仅在动画结束时执行。
关于ios - 按住并释放按钮代码继续运行第一个动画完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403811/