UIView 动画在 UITableViewCell 内无法正常工作

Posted

技术标签:

【中文标题】UIView 动画在 UITableViewCell 内无法正常工作【英文标题】:UIView animation doesn't work properly inside UITableViewCell 【发布时间】:2015-12-13 15:07:34 【问题描述】:

我有一个 UITableViewCell,它包含一个 UIView,当 TableViewCell 的 awakeFromNib() 被调用时,它正在被动画化。 动画确实适用于 TableViewController 出现时调用的单元格,但滚动时生成的单元格根本不移动。 我该如何解决这个问题? I added an example on Github to demonstrate the issue.

TableViewController

import UIKit

class ViewController: UITableViewController 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 20


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TableViewCell

    return cell


override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.




TableViewCell

import UIKit

class TableViewCell: UITableViewCell 

@IBOutlet weak var animatorCell: UIView!

override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code
    UIView.animateWithDuration(0.3, delay: 0.0, options: [.CurveEaseInOut, .Repeat, .Autoreverse], animations:  () -> Void in
        self.animatorCell.transform = CGAffineTransformMakeTranslation(0, 10)
        , completion: nil)



【问题讨论】:

【参考方案1】:

我不确定,但由于您使用的是dequeueReusableCell,我猜awakeFromNib 没有被调用。第一个单元格使用awakeFromNib 初始化,但下一个单元格将是相同的单元格,重复使用,因此它们不会使用awakeFromNib 初始化。如果我错了,并且 awakeFromNib is 调用了下一个单元格,那么我猜你的动画在它进入屏幕之前就完成了。

无论哪种方式,您都可以尝试在 tableView 中使用 tableView(_:willDisplayCell:forRowAtIndexPath:)(here) 之类的东西,然后从那里调用单元格上的动画方法。

【讨论】:

感谢您的建议。不幸的是,您的建议与上面的代码给出了相同的结果。我将代码从 TableViewCell 移动到 tableView(willDisplayCell)。 @TimeE 我不擅长整个 CGAffine 的东西,所以我不知道你的动画在做什么,但请记住,当你使用你的动画代码时单元格(下一个“页面”),它们已经在第一页中完成了一次动画。也许您需要重新设置它们以使其具有与第一次相同的“起点”? 重置动画解决了问题,谢谢!

以上是关于UIView 动画在 UITableViewCell 内无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

iOS动画1 — UIView动画

应该如何在动画中旋转UIView呢?

UIView 动画在动画期间确定中心

UIView动画

难以链接两个 UIView 动画

ios uiview封装动画(摘录)