在 Swift 4 中显示 UIViewController 时,如何放大/缩小动画?

jo *_*ion 2 animation uiviewcontroller ios swift

我想ViewController用放大/缩小动画从按钮单击呈现,我尝试了一些代码,但它对我不起作用:

func btnClickView(_ sender: UIButton) {
   let objImagePreview = ImagePreview(nibName: "ImagePreview", bundle: nil)
            let transition = CATransition()
            transition.duration = 1
            transition.type = kCATransitionMoveIn
            transition.subtype = kCATransitionFromTop
            transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut)
            view.window!.layer.add(transition, forKey: kCATransition)
            self.present(objImagePreview, animated: false, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

我想动画UIViewController没有UIView。我尝试了很多东西,但它对我不起作用。

小智 5

我希望这会有所帮助

在第一个视图控制器中将目标 ViewControllervc.modalPresentationStyle = .overCurrentContext设置为在呈现之前,并将动画设置为 false 时像这样

if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DestinationViewController") as? DestinationViewController {
            vc.modalPresentationStyle = .overCurrentContext
            self.present(vc, animated: false, completion: nil)
        }
Run Code Online (Sandbox Code Playgroud)

然后在 DestinationViewController 中 viewWillAppear 创建像这样的缩放动画


    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        view.transform = CGAffineTransform(scaleX: 0.00001, y: 0.00001)
        UIView.animate(withDuration: 0.5, animations: { [weak self] in
            self?.view.transform = CGAffineTransform.identity
        })
    }

Run Code Online (Sandbox Code Playgroud)

对我来说,这段代码有效

使用上述代码的 gif 结果示例