如何旋转UIImage,然后反向旋转它?

问题描述 投票:0回答:2

我有一个带有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)
    }

}
swift uikit cgaffinetransform
2个回答
0
投票

在这种情况下,CGFloat.pi-CGFloat.pi动画在同一位置。

可以通过-(CGFloat.pi * 0.999)进行逆时针旋转

self.iv.transform = CGAffineTransform(rotationAngle:-(CGFloat.pi * 0.999))

0
投票

这是我发现的最简单且效果最好的

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)
© www.soinside.com 2019 - 2024. All rights reserved.