在 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 中使用动画更改标签背景颜色的主要内容,如果未能解决你的问题,请参考以下文章