gpt4 book ai didi

ios - 在自定义动画过渡期间淡入背景 View

转载 作者:行者123 更新时间:2023-11-28 15:22:58 25 4
gpt4 key购买 nike

我想为我的应用程序添加一个自定义过渡,并按照这个惊人的答案找到了 here .

它运行良好,但我想更进一步。我想在第一页上看到一个 View ,该 View 最初是 alpha 0 或隐藏的,但随着用户在两个页面之间向下滑动而慢慢淡入。顶 View 将具有透明背景,因此看起来好像它带有背景颜色。我的意思的一个很好的例子可以在 snapchat 中看到,当在页面之间滑动时,如下面的屏幕截图所示。 enter image description here

背景慢慢变成蓝色,当新 View 出现时,背景变成纯蓝色。

我知道这段代码必须按照我遵循的原始问题答案中的说明进入演示 Controller ,但是我不确定我将如何实现它。此外,当将 shouldRemovePresentersView 设置为 false 时,我会在此处崩溃

func animateTransition(using transitionContext: 
UIViewControllerContextTransitioning) {
let inView = transitionContext.containerView
let toView = transitionContext.view(forKey: .to)!
let fromView = transitionContext.view(forKey: .from)!
}

最佳答案

看起来您想做的事情与已完成的事情类似 here .因此,我将使用相同的来源来帮助您更好地理解。

要添加淡入/淡出动画,您只需在 func animateTransition(using transitionContext: UIViewControllerContextTransitioning) 方法中调整 alpha 值(不透明度)。

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let inView = transitionContext.containerView
let toView = transitionContext.view(forKey: .to)!
let fromView = transitionContext.view(forKey: .from)!

var frame = inView.bounds

switch transitionType {
case .presenting:
frame.origin.y = -frame.size.height
toView.frame = frame

// set initial alpha value to 0.0
toView.alpha = 0.0

inView.addSubview(toView)
UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
toView.frame = inView.bounds

// animate to 1.0
toView.alpha = 1.0

}, completion: { finished in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
})
case .dismissing:
toView.frame = frame
inView.insertSubview(toView, belowSubview: fromView)

UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
frame.origin.y = -frame.size.height
fromView.frame = frame

// animate to 0.0
fromView.alpha = 0.0
}, completion: { finished in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
})
}
}

进一步分解:

  • 呈现新的 ViewController:这里的初始值为 0.0,因为 ViewController 起初看起来是淡入淡出,然后慢慢淡入。因此在动画 block 中使用 toView.alpha = 1.0 以淡入 View Controller 。
  • 关闭当前的 ViewController:这里的初始值为 1.0(隐含的,无需设置),因为 ViewController 一开始看起来是不透明的,然后慢慢淡出。因此,在动画 block 中使用 toView.alpha = 0.0,以便在 ViewController 中淡入淡出。

您可以将任何其他动画放在相应的动画 block 中,基本上紧挨着 toView.alpha = 1.0fromView.alpha = 0.0

关于设置shouldRemovePresentersView为false时出现的crash,我想答案的作者已经给出了解决方案。你可以check a comparison以确切了解如何修复崩溃。

编辑:从按钮转换:

@IBAction func didTapShowButton(_ sender: UIButton) {
let controller = storyboard!.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
present(controller, animated: true)
}

不要忘记将它连接到按钮!

关于ios - 在自定义动画过渡期间淡入背景 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679448/

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