如何最好地为 UITableViewCell 或 UIButton 设置动画以重复亮起红色
Posted
技术标签:
【中文标题】如何最好地为 UITableViewCell 或 UIButton 设置动画以重复亮起红色【英文标题】:How to best animate a UITableViewCell or UIButton to light up in red repitetly 【发布时间】:2011-11-22 16:03:29 【问题描述】:我希望UITableViewCell
(-background) 很快亮起红色并再次恢复到原来的样子。这是在NSTimer
的生命周期内完成的,它不断地推动调用动画。
现在我正在使用 UIView 的animateWithDuration:delay:options:animations:completion:
方法首先将单元格背景颜色更改为红色,然后在完成部分将其再次变为灰色(单元格的背景为灰色)。但是由于某种原因,此解决方案无法顺利运行。
问题:考虑核心动画,我如何最好地为 (a) UITableVeiwCell
和 (b) UIButton
制作这种动画?
感谢您的帮助!
【问题讨论】:
【参考方案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];
view 是有问题的控件。对于只是按钮本身的 UIButton,对于 UITableViewCell,它取决于表格是否被分组,或者您是否使用自定义 UITableViewCell。分组的表格单元格添加了一个 backgroundview 属性。
【讨论】:
我正在使用自定义 UITableViewCell。我用更多细节和代码更新了我的问题。你能看出有什么问题吗? 第一次运行后似乎失去了为图层设置动画的能力。确保您在主线程上,因为这是一个 UI 操作。我看到的另一个问题是表格视图单元格的图层委托可能已更改。如果是这种情况,您可以尝试添加一个新层并为其设置动画,因为有时 CA 与顶层层的委托有问题。您可以使用 [CALayer layer] 创建一个新层并将其添加到您的层,就像您将子视图添加到视图一样。用相同的边界创建它,然后在上面运行你的动画。否则我没有想法...... 它并没有改变奇怪的行为。非常感谢您的帮助。【参考方案2】:我使用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
不是这种情况。
【讨论】:
以上是关于如何最好地为 UITableViewCell 或 UIButton 设置动画以重复亮起红色的主要内容,如果未能解决你的问题,请参考以下文章