ios - 按住并释放按钮代码继续运行第一个动画完成 block

标签 ios objective-c cocoa-touch uiview

我想按住一个按钮 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/

相关文章:

iOS - AFNetworking 在失败后恢复下载

ios - 如何在没有外部库的情况下干净地将文件发布到 API 端点?

ios - 在 ios 中绘制图像渐变

iphone - 在 iPhone 编程中从字符串中获取数字

iphone - UITableView 怪异!带图片

ios - 在ios中将字符串转换为 float

iphone - Skype如何在通话过程中保持在顶部并且您在iPhone中切换到其他应用程序

objective-c - 如何在 objective-c 中比较两个具有很多属性的对象

Objective-C - 编写简单方法的最佳实践?

iphone - 如何在核心动画中强制执行特定的旋转方向(即顺时针)?