2015-04-01 121 views
1
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中設置動畫UIView?

我應該使用哪種方法,或者我應該放哪種動畫來查看UITableViewCell中的任何動畫。我知道我不能動畫現有的標籤,因爲這些都是有約束力的。

回答

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