如何在UITableViewCell中为任何UIView设置动画?

时间:2015-04-01 08:46:20

标签: uitableview animation tableviewcell

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中的任何动画。我知道我不能为现有标签设置动画,因为它们都有约束条件。

1 个答案:

答案 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)