我已经构建了一个可扩展的Tableview,并且我希望有一个箭头,该箭头在单元格未扩展时指向左侧,在单元格扩展时向下指向。
第一个动画(将箭头指向下方)的工作原理很像。尝试向后旋转(在关闭展开的单元格时)时,它只是跳回正常状态而没有任何动画。 在我的cellForRow中,我这样做:
cell.image1.rotate(item.opened ? -.pi/2 : 0, duration: 0.4)
我有一个扩展名:
extension UIView {
func rotate(_ toValue: CGFloat, duration: CFTimeInterval) {
let animation = CABasicAnimation(keyPath: "transform.rotation")
animation.toValue = toValue
animation.duration = duration
animation.isRemovedOnCompletion = false
animation.fillMode = CAMediaTimingFillMode.forwards
self.layer.add(animation, forKey: nil)
}
}
此功能在表格视图之外就像一种魅力。但是在Tableview内部,它总是在没有动画的情况下恢复正常。 知道这是哪里来的吗?
答案 0 :(得分:0)
使用action
方法而不是func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
的循环调用
尝试下面的代码。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
cell.rotateArrow()
}
在CustomTableViewCell中
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var arrowImageView: UIImageView!
var isOpened = false
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
func rotateArrow() {
isOpened = !isOpened
arrowImageView.rotate(isOpened ? -.pi/2 : 0, duration: 0.4)
}
}
答案 1 :(得分:0)
好,我找到了答案。 由于执行了我的旋转功能,它跳回了(没有任何动画)。输入0时不进行动画处理,因为图像在重新加载时已设置在单元格中。因此没有任何动画。现在我只需要设置图片并对其进行动画处理。
if item.opened{
cell.image1.image = UIImage(named: "back")
cell.image1.rotate(-.pi/2, duration: 0.3)
} else {
cell.image1.image = UIImage(named: "down")
cell.image1.rotate(.pi/2, duration: 0.3)
}