UIView
您可以使用UIView 的animation methods 来处理动画方面的事情...
This question 有几个答案,您应该如何重复动画,并在每个循环之间检查动画是否应该继续或停止。
但是,鉴于您想启动一个连续动画并根据其他事件中断/停止它,我认为使用 CABasicAnimation 可能会更好...
CABasicAnimation
您可以使用CABasicAnimation 为UITableViewCell 的backgroundColor 设置动画。
例如,下面是我用来为UIView 设置颜色的一些代码:
// UIView* _addressTypeTokenView;
// UIColor* _tokenOnColour;
// UIColor* _tokenOffColour;
CABasicAnimation* colourChange = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
colourChange.fromValue = (__bridge id)(_tokenOffColour.CGColor);
colourChange.toValue = (__bridge id)(_tokenOnColour.CGColor);
colourChange.duration = 0.6;
colourChange.delegate = self;
_addressTypeTokenView.layer.backgroundColor = _tokenOnColour.CGColor;
[_addressTypeTokenView.layer addAnimation:colourChange forKey:@"colourChangeAnimation"];
你会想要创建一个永远重复的动画。 (根据a related question on this topic)使用HUGE_VALF 来创建这样的动画是合法的。例如
colourChange.repeatDuration = HUGE_VALF;
创建CABasicAnimation 后,将其添加到相关视图的CALayer 中,并添加一个键:
- (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key
在上面的示例中,我使用了密钥@"colourChangeAnimation":
[_addressTypeTokenView.layer addAnimation:colourChange forKey:@"colourChangeAnimation"];
该密钥可以稍后用于remove the animation,使用此方法:
- (void)removeAnimationForKey:(NSString *)key
您仍然需要定期检查数据是否仍然有效。如果生效,可以去掉动画,停止闪烁效果。
您可以使用计时器在视图控制器中进行 checking,或者让 model 对象处理数据有效性检查并使用委托回调与视图控制器(分离职责并保持视图控制器整洁)。
无论您如何处理数据有效性检查,CABasicAnimation 方法都提供了一种干净的方式来启动和停止动画。