我有一个带有UIImageView的UITableViewCell。当用户点击我的表格视图中的单元格时,将调用cell.isExpanded.toggle()
来旋转图像。
现在,它从0顺时针旋转到180,但是再次轻按时,它也从顺时针旋转180到0。
当值为false时如何使其逆时针旋转180到0?
class TVCell: UITableViewCell {
var isExpanded = false {
didSet {
rotateImage(isExpanded)
}
}
let iv = UIImageView()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
addSubview(iv)
iv.center.x = 33
iv.center.y = 6
iv.frame.size = CGSize(width: 30, height: 30)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func rotateImage(_ val: Bool) {
UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseInOut, animations: {
if val {
self.iv.transform = CGAffineTransform(rotationAngle: .pi)
} else {
self.iv.transform = .identity
}
}, completion: nil)
}
}
在这种情况下,CGFloat.pi
和-CGFloat.pi
动画在同一位置。
可以通过-(CGFloat.pi * 0.999)
进行逆时针旋转
self.iv.transform = CGAffineTransform(rotationAngle:-(CGFloat.pi * 0.999))
这是我发现的最简单且效果最好的
UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseInOut, animations: {
let rotationAngle: CGFloat = val ? .pi : (-.pi * 2)
self.iv.transform = .init(rotationAngle: rotationAngle)
}, completion: nil)