首先,您應該將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進行動畫製作,您需要更改要動畫的NSLayoutConstraint
上的constant
。這給出了一個很好的例子:iOS: How does one animate to new autolayout constraint (height)