UIStoryboardSegue & UIVisualEffectView - 完成块退出后模糊效果丢失

Posted

技术标签:

【中文标题】UIStoryboardSegue & UIVisualEffectView - 完成块退出后模糊效果丢失【英文标题】:UIStoryboardSegue & UIVisualEffectView - Blur effect lost after completion block exits 【发布时间】:2014-10-24 15:19:13 【问题描述】:

我有一个由带有 UIImageView 的视图控制器组成的小型应用程序。当用户点击屏幕时,会显示一个带有自定义转换的 tableview 控制器(模型)。过渡将 UIBlurEffectview 添加到呈现的 tableview。想要的效果是在模糊图像上显示 UITableView。

当 tableview 出现时,它会在一瞬间显示模糊视图。但是,一旦完成块退出(在 presentViewController:animated:completion 上),视图就会完全变黑。

完成块退出前的示例:

完成块退出后:

这里是转场代码:

UIViewController *sourceController = self.sourceViewController;
UIViewController *destinationController  = self.destinationViewController;


UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *blurView = [[UIVisualEffectView alloc]initWithEffect:blurEffect];
blurView.frame = destinationController.view.frame;


[destinationController.view setOpaque:NO];
[destinationController.view setBackgroundColor:[UIColor clearColor]];
[destinationController.view insertSubview:blurView atIndex:0];
[destinationController setModalPresentationStyle:UIModalPresentationFullScreen];

[sourceController presentViewController:destinationController animated:NO completion:^
    NSLog(@"Completed");
];

我有点不知道该去哪里。我知道调用完成块之前的最后一次调用是显示控制器上的 viewDidAppear,这并没有改变任何东西。非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

找到了解决办法。如果您使用的是 Modal segue,则需要将 Presentation 从默认设置为全屏。

【讨论】:

我得到了这个工作,但现在有趣的部分是 unwind segue 没有为我的源视图控制器设置动画:(

以上是关于UIStoryboardSegue & UIVisualEffectView - 完成块退出后模糊效果丢失的主要内容,如果未能解决你的问题,请参考以下文章

如何“取消” UIStoryBoardSegue

UIStoryboardSegue:动画期间不显示视图

UIStoryBoardSegue 方法的 iOS Swift 问题

UIStoryboardSegue:顶视图没有向下滑动

UIStoryBoardSegue 过渡 - 状态栏问题

UIStoryboardSegue 为子类中的属性设置动画