UIVisualEffectView 延迟与 UIModalTransitionStyle CrossDissolve

Posted

技术标签:

【中文标题】UIVisualEffectView 延迟与 UIModalTransitionStyle CrossDissolve【英文标题】:UIVisualEffectView delay with UIModalTransitionStyle CrossDissolve 【发布时间】:2016-10-17 12:13:22 【问题描述】:

我正在展示一个模态视图控制器,其背景为UIVisualEffectViewUIBlurEffect 类型为.light

我将模态视图控制器呈现如下:

infoViewController.modalPresentationStyle = .overFullScreen
infoViewController.modalTransitionStyle = .crossDissolve
self.present(infoViewController, animated: true, completion: nil)

我注意到直到 crossDissolve 动画完成后才会出现模糊效果视图。 对于coverVertical等其他过渡样式,情况并非如此。

这只发生在带有 Swift 3 的 ios 10 上。

如何让crossDissolve 动画与infoViewController 上的视觉效果视图一起工作。有什么建议/解决方法吗?

【问题讨论】:

您的代码在 iOS 10 (Swift 3) 测试项目中运行良好。您确定您没有在 viewWillAppear/viewDidAppear 方法中对视图进行任何操作吗? 完全没有任何操作。对我来说,交叉溶解动画完成,弹出视图动画可见,然后背景 uieffect 视图突然出现。 你能把它包装在一个测试项目中,以便我可以重现它并修复它吗? ...或先提供infoViewController的代码 这是 Objective C 中的答案。***.com/questions/39671408/… 【参考方案1】:

我所做的是将crossDisolve 替换为CATransition,如下所示:

self.present(controller,
             animated: false,
             completion: nil)

let transition = CATransition()
transition.duration = 0.3
transition.type = kCATransitionFade
view.window?.layer.add(transition, forKey: nil)

希望对您有所帮助。

【讨论】:

动画完成后会发生什么。?如果添加到图层中,是否应该再次删除,还是可以忽略? 可以忽略。完成后会自动删除过渡【参考方案2】:

检查你的领事馆,你应该在那里看到原因 -

<_uipopoverbackgroundvisualeffectview> 被要求为其不透明度设置动画。这将导致效果出现损坏,直到不透明度恢复为 1。

您不能将UIVisualEffectViewcrossDissolve 动画一起使用...

【讨论】:

以上是关于UIVisualEffectView 延迟与 UIModalTransitionStyle CrossDissolve的主要内容,如果未能解决你的问题,请参考以下文章

UIVisualEffectView 和 UITableView

在 WKWebView 上滚动时 UINavigationBar/UIVisualEffectView 的模糊半透明效果?

UIVisualEffectView 变灰(不工作)

iOS 10 上的 UIVisualEffectView 蒙版

如何使用 UIVisualEffectView 模糊图像?

放置在白色背景上时,UIVisualEffectView“消失”