在 iOS 中使用动画更改标签背景颜色

Posted

技术标签:

【中文标题】在 iOS 中使用动画更改标签背景颜色【英文标题】:Change label background color using animation in iOS 【发布时间】:2020-07-16 07:17:46 【问题描述】:

我正在尝试显示动画的 n 个关卡。

UIStackView 下有 n 个层级。

我想要什么: 使用动画

首先,更改标签4的背景颜色 二、更改label 3的背景色 三、更改标签7的背景色

.......

第n次,更改标签背景颜色

有什么问题: 立即更改所有背景颜色而不会延迟。

@property (nonatomic, strong) IBOutletCollection(UILabel) NSArray *lblArray;



-(void)animationTestIntoLoop 

__block NSMutableArray* animationBlocks = [NSMutableArray new];
typedef void(^animationBlock)(BOOL);

// getNextAnimation
// removes the first block in the queue and returns it
animationBlock (^getNextAnimation)(void) = ^

    if ([animationBlocks count] > 0)
        animationBlock block = (animationBlock)[animationBlocks objectAtIndex:0];
        [animationBlocks removeObjectAtIndex:0];
        return block;
     else 
        return ^(BOOL finished)
            animationBlocks = nil;
        ;
    
;

for (UILabel *label in self.lblArray) 
    [animationBlocks addObject:^(BOOL finished)
        [UIView animateWithDuration:3 delay:1.0 options:UIViewAnimationOptionCurveLinear animations:^
            //my first set of animations

            label.backgroundColor = [UIColor redColor];



         completion: getNextAnimation()];
    ];

 

getNextAnimation()(YES);


【问题讨论】:

【参考方案1】:

我在任何地方都找不到它的文档,但 UILabel 的 backgroundColor 属性似乎不是可动画的。但是,只要您不设置标签视图本身的背景颜色,此 hack 似乎就可以工作:

*#import <QuartzCore/QuartzCore.h>*
    
        
//Add this in ViewDidLoad

for (UILabel *label in self.lblArray)

    label.layer.backgroundColor = [UIColor whiteColor].CGColor;


-(void)animationTestIntoLoop

    __block NSMutableArray* animationBlocks = [NSMutableArray new];
    typedef void(^animationBlock)(BOOL);
    
    // getNextAnimation
    // removes the first block in the queue and returns it
    animationBlock (^getNextAnimation)(void) = ^
        
        if ([animationBlocks count] > 0)
            animationBlock block = (animationBlock)[animationBlocks objectAtIndex:0];
            [animationBlocks removeObjectAtIndex:0];
            return block;
         else 
            return ^(BOOL finished)
                animationBlocks = nil;
            ;
        
    ;
    
    for (UILabel *label in self.lblArray)
    
        [animationBlocks addObject:^(BOOL finished)
            
            [UIView animateWithDuration:2.0 animations:^
                label.layer.backgroundColor = [UIColor redColor].CGColor;
             completion:getNextAnimation()];
        ];
    
    getNextAnimation()(YES);
    

【讨论】:

这也会同时改变背景颜色。而是我想一一改变 @ShourobDatta :我已经更新了答案,请试试这个。它会起作用的。

以上是关于在 iOS 中使用动画更改标签背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在单击功能中使用动画更改元素的背景颜色? [复制]

更改标签栏中活动整个部分的颜色 - iOS 7

在具有多个部分的 tableView 中滚动时使用平滑动画更改视图背景渐变颜色

更改标签栏的背景颜色

使用动画更改 UIView 背景颜色

如何为 QPushButton 的背景颜色设置动画(动态更改按钮颜色)