let label = UILabel(frame: CGRectMake(20.0, 20.0, 15.0, 15.0))
label.backgroundColor = UIColor.flamingoColor()
UIView.animateWithDuration(3.0, animations: {
cell.addSubview(label)
label.backgroundColor = UIColor.yellowColor()
})
此代码我放在tableView:cellForRowAtIndexPath:
- >结果是一个黄色背景的子视图,但我还没有看到任何动画。方法tableView:didEndDisplayingCell:
我应该使用哪种方法或者我应该在那里放置什么样的动画来查看UITableViewCell中的任何动画。我知道我不能为现有标签设置动画,因为它们都有约束条件。
答案 0 :(得分:0)
首先,您应该将cell.addSubview(label)
移到动画块之外,并将标签添加到单元格的contentView
。
回到你的问题。您无法为UILabel的背景颜色设置动画。你可以在UILabel后面使用相同大小的UIView来获得相同的效果。
为了让UIView在出现后改变颜色,我使用了UITableViewCell子类:
class AnimatedCell : UITableViewCell {
let animatedView = UIView()
/* Setup by adding animatedView to the contentView and setting the
animated view's initial frame and colour.
*/
func animate() {
UIView.animateWithDuration(3.0) {
animatedView.backgroundColor = UIColor.redColor()
}
}
然后在UITableViewController
子类中,当显示视图控制器时,将填充UITableView
,因此您需要使用以下内容为这些单元格制作动画:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated: Bool)
for cell in tableView.visibleCells() as! [UITableViewCell] {
if let animatedCell = cell as? AnimatedCell {
animatedCell.animate()
}
}
}
然后,对于滚动时出现的单元格:
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if let animatedCell = cell as? AnimatedCell {
a.animateLabel()
}
}
此外,您可以使用AutoLayout设置动画,您需要更改要设置动画的constant
上的NSLayoutConstraint
。这给出了一个很好的例子:iOS: How does one animate to new autolayout constraint (height)