我想要一个UITableViewCell
( - 背景)很快点亮为红色并再次返回旧的外观。这是在NSTimer
的生命期间完成的,它给出了调用动画的持续冲动。
现在我正在使用UIView的animateWithDuration:delay:options:animations:completion:
方法首先将单元格背景颜色更改为红色,然后在完成部分中将其再次变为灰色(单元格的背景为灰色)。但是这个解决方案由于某种原因不能顺利运行。
问题:想到核心动画,我怎样才能最好地为(a)UITableVeiwCell
和(b)UIButton
做这种动画?
感谢您的帮助!
答案 0 :(得分:1)
animateWithDuration是核心动画的UIView包装器,但你可以尝试将它做得更低一些,看看是否有变化。 要在CALayer上执行显式CA事务,请执行以下操作:
[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[CATransaction setCompletionBlock:^{ //Your completion block }];
view.layer.backgroundColor = [UIColor whiteColor].CGColor;
[CATransaction commit];
视图是有问题的控件。对于只是按钮本身的UIButton,对于UITableViewCell,它将取决于表是否已分组或是否使用自定义UITableViewCell。分组的表格单元格添加了backgroundview属性。
答案 1 :(得分:0)
我正在使用NSTimer
一遍又一遍地触发动画。不知何故,它给出了上述副作用。现在我正在使用自iOS4
以来可用的块动画,它运行得更顺畅。您必须组合(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
选项才能重复动画:
[UIView animateWithDuration:kDurationOfCellAnimation delay:0 options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
animations:^{
//this will be animated in and out
cell.backgroundColor = CELL_RECORDING_COLOR;
}
completion:^(BOOL finished){
cell.backgroundColor = TABLEVIEW_BACKGROUND_COLOR;
}];
我遇到的唯一副作用是当单元格离开屏幕时动画停止,而NSTimer
则不然。