我的目标是单击按钮切换contentMode:带有动画的scaleAspectFit和scaleAspectFill。

    @IBAction func toggleContentModeAction(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
    if sender.isSelected {
        UIView.animate(withDuration: 0.3) {
            self.popImageView.contentMode = .scaleAspectFit
            self.view.layoutIfNeeded()
        }
    }else {
        UIView.animate(withDuration: 0.3) {
            self.popImageView.contentMode = .scaleAspectFill
            self.view.layoutIfNeeded()
        }
    }
}

但对我的目标没有效果。请帮我解决,谢谢柬埔寨。

最佳答案

contentMode本身不是可设置动画的属性。但是您可以使用 transition(with:duration:options:animations:completion:) 在一个视图的两个不同表示形式之间进行动画处理,例如

@IBAction func didTapButton(_ sender: UIButton) {
    let contentMode: UIViewContentMode = imageView.contentMode == .scaleAspectFill ? .scaleAspectFit : .scaleAspectFill

    UIView.transition(with: imageView, duration: 1, options: .transitionCrossDissolve, animations: {
        self.imageView.contentMode = contentMode
    }, completion: nil)
}

产生:

ios - Swift 3/4如何为UIImageView的contentMode设置动画-LMLPHP

10-08 06:27