【问题标题】:Change button color with animation in iOS在 iOS 中使用动画更改按钮颜色
【发布时间】:2015-08-10 05:22:54
【问题描述】:

我的应用程序中有一个下载过程,我想在下载开始时开始更改下载按钮的颜色,直到下载完成。是否有使用起点和终点更改按钮标题颜色的动画?我不知道动画持续时间,因为它取决于互联网连接和文件大小。我有以下动画,但它与我想要的不同:

[UIView animateWithDuration:1.0 animations:^{
    dlButton.backgroundColor = [UIColor MyColor];
}];

【问题讨论】:

    标签: ios objective-c animation


    【解决方案1】:

    我认为当您需要更新进度时,您必须手动更改backgroundColor

    首先,获取下载进度:

    CGFloat progress = xxxx
    

    然后你需要实现一个方法更新backgroundColor,如下所示:

    - (void)changeColorByProgress:(CGFloat)progress {
        CGFloat red, green, blue;
        [[UIColor grayColor] getRed:&red green:&green blue:&blue alpha:NULL];
    
        CGFloat completedRed, completedGreen, completedBlue;
        [[UIColor whiteColor] getRed:&completedRed green:&completedGreen blue:&completedBlue alpha:NULL];
    
        [self.button setTitleColor:[UIColor colorWithRed:red + (completedRed - red) * progress
                                           green:green + (completedGreen - green) * progress
                                            blue:blue + (completedBlue - blue) * progress
                                           alpha:1]
                          forState:UIControlStateNormal];
    
    }
    

    检查我的示例项目: https://www.dropbox.com/s/nxq90sz3w65oa0k/TestManualChangeColor.zip?dl=0

    【讨论】:

    • 只需使用setTitleColor:forState 而不是setBackgroundColor
    • 别担心,我很高兴听到它解决了您的问题 :)
    • 亲爱的 Bannings,无论如何都要为这种改变颜色的方法提供持续时间?
    • 如何获得持续时间?
    【解决方案2】:

    如果您使用 AFNetworking 下载文件,您可以轻松跟踪其进度。在块中调用 delagate 方法来更新进度条的背景颜色。

    查看以下链接:http://cocoadocs.org/docsets/AFNetworking/2.0.1/Categories/UIProgressView+AFNetworking.html

    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request  progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response){
        NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) firstObject]];
        return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error){
        NSLog(@"File downloaded to: %@", filePath);
    
    }];
    
    [self.progressView setProgressWithDownloadProgressOfTask:downloadTask animated:YES];
    [downloadTask resume];
    

    您还可以通过调用自定义方法并在该方法中更改进度条颜色来更改颜色。

    【讨论】:

      【解决方案3】:
          [yourButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
      

      【讨论】:

      • 那么,在你的答案中,这种颜色的变化究竟会被动画化?
      猜你喜欢
      • 2019-08-31
      • 2015-01-25
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多