CGAffineTransform-使用后像素化

时间:2019-07-24 15:55:05

标签: swift core-graphics cgaffinetransform

问题:

使用CGAffineTransform时,我失去了UIView及其所有子视图的质量。

代码

我当前正在运行以下代码来缩放和移动我的UIView。

    func animate(show: Bool, navigationController: UINavigationController) {
    let viewWidth = UIScreen.main.bounds.width
    let scale: CGFloat = 0.7

    UIView.animate(withDuration: 0.5, animations: {

        if !show {
            var t = CGAffineTransform.identity
            t = t.scaledBy(x: scale,
                           y: scale)
            t = t.translatedBy(x: viewWidth * 0.6, y: 0)
            navigationController.view.transform = t
        } else {
            navigationController.view.transform = .identity
        }

    }) { (complete) in
        if show {
            let sideMenuView = UIApplication.shared.keyWindow?.viewWithTag(-253)
            sideMenuView?.removeFromSuperview()
        }
    }
}

但是当我回到原来的状态时,一切都是像素化和低质量的。

我已经尝试过手机和模拟器。 Ive删除了比例因子,问题仍然存在。 Ive还尝试将值设置为原始值。

示例

     var t = CGAffineTransform.identity
        t = t.scaledBy(x: 1,
                       y: 1)
        t = t.translatedBy(x: 0, y: 0)
        navigationController.view.transform = t

问题

使用CGAffineTransform时是否可以保留质量?

谢谢

托马斯

1 个答案:

答案 0 :(得分:0)

已解决

真的很简单。

设置rasterizationScale解决了该问题。

    func animate(show: Bool, navigationController: UINavigationController) {
    let viewWidth = UIScreen.main.bounds.width
    let scale: CGFloat = 0.7
    navigationController.view.layer.rasterizationScale = UIScreen.main.scale

    UIView.animate(withDuration: 0.5, animations: {

        if !show {
            var trans = CGAffineTransform.identity
            trans = trans.scaledBy(x: scale,
                           y: scale)
            trans = trans.translatedBy(x: viewWidth * 0.6, y: 0)
            navigationController.view.transform = trans

        } else {
            navigationController.view.transform = .identity
        }

    }) { (complete) in
        if show {
            let sideMenuView = UIApplication.shared.keyWindow?.viewWithTag(-253)
            sideMenuView?.removeFromSuperview()
        }
    }
}