- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为我的应用程序添加一个自定义过渡,并按照这个惊人的答案找到了 here .
它运行良好,但我想更进一步。我想在第一页上看到一个 View ,该 View 最初是 alpha 0 或隐藏的,但随着用户在两个页面之间向下滑动而慢慢淡入。顶 View 将具有透明背景,因此看起来好像它带有背景颜色。我的意思的一个很好的例子可以在 snapchat 中看到,当在页面之间滑动时,如下面的屏幕截图所示。
背景慢慢变成蓝色,当新 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)
})
}
}
进一步分解:
toView.alpha = 1.0
以淡入 View Controller 。toView.alpha = 0.0
,以便在 ViewController 中淡入淡出。您可以将任何其他动画放在相应的动画 block 中,基本上紧挨着 toView.alpha = 1.0
和 fromView.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/
我是一名优秀的程序员,十分优秀!