gpt4 book ai didi

ios - 用过渡呈现 viewController

转载 作者:行者123 更新时间:2023-11-28 13:30:57 26 4
gpt4 key购买 nike

当我实例化并呈现一个 View Controller 时是否可以定义一种转换类型?

此代码生成默认的淡入淡出类型过渡,但我需要它从左到右出现,这可能吗?

谢谢!

@IBAction func botonVolverFamilias(_ sender: Any) {
let sw = revealViewController()
self.view.window?.rootViewController = sw
let viewControllerModelos = storyboard!.instantiateViewController(withIdentifier: "vc_catalogo_familias") as! VC_catalogo
let navigationController = UINavigationController(rootViewController: viewControllerModelos)
navigationController.navigationBar.isHidden=false
navigationController.setNavigationBarHidden(true, animated: false)
sw!.setFront(navigationController, animated: true)
}

最佳答案

要更改 UINavigationController 的转换,您需要使用的是找到堆栈中的第一个 UIViewController。您应该将此 UIViewController 扩展为 UIViewControllerTransitioningDelegateUINavigationControllerDelegate

然后你可以调用 func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? 来定义什么样的过渡想要呈现新的 UIViewControllers

因此,为了做到这一点,我们必须创建一个自定义的 UIViewControllerAnimatedTransitioning 类,并在此 UIViewControllerTransitioningDelegate 方法中返回它。这是我使用的示例。

import UIKit

class SimpleOver: NSObject, UIViewControllerAnimatedTransitioning {
var direction: TransitionDirection!

init(direction: TransitionDirection) {
self.direction = direction
}


var popStyle: Bool = false

func transitionDuration(
using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.20
}

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

if popStyle {

animatePop(using: transitionContext)
return
}

let fz = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)!
let tz = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!

let f = transitionContext.finalFrame(for: tz)

let fOff = f.offsetBy(dx: f.width, dy: 0)
tz.view.frame = fOff

transitionContext.containerView.insertSubview(tz.view, aboveSubview: fz.view)

UIView.animate(
withDuration: transitionDuration(using: transitionContext),
animations: {
tz.view.frame = f
for subview in fz.view.subviews {
subview.alpha = 0
}
}, completion: {_ in
transitionContext.completeTransition(true)
})
}

func animatePop(using transitionContext: UIViewControllerContextTransitioning) {

let fz = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)!
let tz = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!

let f = transitionContext.initialFrame(for: fz)
let fOffPop = f.offsetBy(dx: f.width, dy: 0)

transitionContext.containerView.insertSubview(tz.view, belowSubview: fz.view)

UIView.animate(
withDuration: transitionDuration(using: transitionContext),
animations: {
fz.view.frame = fOffPop
for subview in tz.view.subviews {
subview.alpha = 1
}
}, completion: {_ in
transitionContext.completeTransition(true)
})
}
}

enum TransitionDirection {
case left
case right
}

然后,在我们的 func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? 方法中,我们可以简单地返回这个UIViewControllerAnimatedTransitioning 如下:

extension YourViewController: UIViewControllerTransitioningDelegate, UINavigationControllerDelegate {
func navigationController(
_ navigationController: UINavigationController,
animationControllerFor operation: UINavigationController.Operation,
from fromVC: UIViewController,
to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {

//This tells our navigation controller the style that we want to animate our transition between view controllers

let simpleOver = SimpleOver(direction: .right)
simpleOver.popStyle = (operation == .pop)
return simpleOver
}
}

关于ios - 用过渡呈现 viewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57344624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com