具有透明背景的UIModalPresentationFormSheet?

时间:2012-01-11 23:43:18

标签: ios cocoa-touch ipad uikit

基本上我在这里希望模态表单是透明的,所以我可以看到它背后的UIView(它是全屏)。

这可能吗?将UIView设置为不透明,将backgroundColor设置为[UIColor clearColor]不起作用。

我注意到当我从UIModalPresentationFormSheet切换到另一种演示样式时,我的视图的背景确实是透明的。

我哪里出错?

2 个答案:

答案 0 :(得分:4)

这对我有用:

[modalView.superview setBackgroundcolor:[UIColor clearColor]];

它仍会透明地调暗背景视图,但不会用纯灰色覆盖它。

...............................................

iOS 8更新

我之前的解决方案不再适用于iOS 8。 有很多步骤可以让这样的东西适用于iOS 8.所以我创建了一个很好的可重用解决方案:ModalController https://github.com/koreyhinton/ModalController

它真的很容易使用并自动解散。

let modal = ModalController()
modal.content = myCustomView
presentViewController(modal, animated: true, completion: nil)

如果您对实施细节感兴趣,我就是这样做的:

让你的模态视图控制器占据整个屏幕,主视图的背景将在清晰和半暗之间切换。然后,您将拥有一个内容视图,该视图将以实心背景颜色为中心。我还使用了我在init方法中指定的演示风格:.OverCurrentContext

var content = UIView()

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.clearColor()
    content.frame = CGRect(x:0, y:0, width:300, height:300)
    content.backgroundColor = UIColor.blackColor()
    view.addSubview(content)
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    view.backgroundColor = UIColor.clearColor()
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    content!.center = view.center
}

答案 1 :(得分:2)

据我所知,这已经不可能了。它曾经是,但Apple已禁用此功能。

我所做的只是简单地创建我的UIView,并将它们作为子视图添加到我的主视图中。我必须解雇我的表单,然后进行此演示。