我正在玩动画。我设置了一个tableView
,其中包含一个自定义tableViewCell
,其中包含一个UIView
。 UIView
的宽度在10秒内从400变为0。现在具有tableView
的键性质,在滚动表时将呈现单元格。这可以做某些事情:
UIView
消失了。 UIView
会在显示单元格时开始动画显示。 这是代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellid, for: indexPath) as! listTableViewCell
cell.testlabel.text = "\(indexPath.row)"
return cell
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if let myCell = cell as? listTableViewCell {
UIView.animate(withDuration: 10, animations: {
myCell.timeRemainingView.frame.size.width = 0
self.loadViewIfNeeded()
})
}
}
问题:我希望所有单元在应用启动时开始动画,并在滚动时保持动画。
更新:
这就是我所做的。我正在使用CADisplayLink并以这种方式运行动画。我正在自定义tableviewcell文件中执行所有这些操作。我唯一需要弄清楚的是每个单元的自定义持续时间。这是代码:
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
contentView.addSubview(timeRemainingView)
contentView.addSubview(testlabel)
contentView.bringSubviewToFront(testlabel)
contentView.backgroundColor = .white
let displayLink = CADisplayLink(target: self, selector: #selector(handleProgressAnimation))
displayLink.add(to: .main, forMode: .defaultRunLoopMode)
setupViews()
}
let animationDuration = 60.0
let animationStartDate = Date()
@objc func handleProgressAnimation() {
let currenttime = Date()
let elapsed = currenttime.timeIntervalSince(animationStartDate)
let percentage = elapsed / animationDuration
timeRemainingView.frame.size.width = CGFloat(400 - (400 * percentage))
}
有什么提示或建议吗?
答案 0 :(得分:-2)
像这样替换您的cellForRowAtIndex:
let identifier = "homeCell"
var cell = tableView.dequeueReusableCell(withIdentifier: identifier) as! listTableViewCell
if cell == nil {
tableView.register(UINib(nibName: "listTableViewCell", bundle: nil), forCellReuseIdentifier: identifier)
cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? listTableViewCell
}
cell.testlabel.text = "\(indexPath.row)"
return cell