iOS 8:将具有模糊效果的UIVisualEffectView应用于紧凑模式下的模态PopOver

时间:2014-11-24 02:54:49

标签: swift ios8 popover uivisualeffectview uipresentationcontroller

我正试图制作一个像2014年WWDC会议214那样的弹出窗口。

所以我开始构建我的应用程序使用IB,其中有两个视图由" Present As Popover" segue,如此:

enter image description here 弹出视图包含一个填充其超级视图的文本视图,具有以下约束: enter image description here

为了支持模态弹出,请使用以下代码:

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return .OverFullScreen
}

func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {

    let navigationController = UINavigationController(rootViewController: controller.presentedViewController)
    controller.presentedViewController.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "done"), animated: true)

    return navigationController
}

这给了我以下结果: enter image description here

然后我尝试添加带有模糊效果的UIVisualEffectView。起初我只是在显示的控制器视图中添加了一个子视图,在检查了视图层次结构后,我意识到我的效果视图实际上是在我的文本视图之上,但是我的文本视图被正确放置了。所以我尝试了insertSubview:atIndex:这样的方法:

func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {

    let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView
    effectView.setTranslatesAutoresizingMaskIntoConstraints(false)
    controller.presentedViewController.view.insertSubview(effectView, atIndex: 0)

    let viewList : [String : UIView] = ["effectView" : effectView]

    let navigationController = UINavigationController(rootViewController: controller.presentedViewController)
    controller.presentedViewController.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "done"), animated: true)


    controller.presentedViewController.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[effectView]|", options: nil, metrics: nil, views: viewList))

    controller.presentedViewController.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[effectView]|", options: nil, metrics: nil, views: viewList))

    return navigationController
}

但是我仍然无法呈现IB中定义的文本视图: enter image description here

通过视图层次结构,当我在索引0处插入UIVisualEffectView时,我可以看到我的文本视图以某种方式移动到导航栏下方。

有关如何以编程方式将模糊效果设置在文本下方而不使其消失/移动到导航栏下方的任何想法?

干杯

1 个答案:

答案 0 :(得分:0)

这个功能对你有帮助吗?

view.insertSubview(view: effectView, belowSubview: label)