【问题标题】:Transparent ViewController to See Parent Below?透明的 ViewController 可以看到下面的父级?
【发布时间】:2012-11-20 01:11:30
【问题描述】:

我想以模态方式添加一个具有透明背景的视图控制器,以便可以看到下面的父视图控制器。 (这是适用于 iPhone 的应用程序,而不是适用于 iPad 的应用程序。)

我试过这个:

TextFieldViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TextFieldVC"];
vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentViewController:vc animated:YES completion:^{}];

没有运气,给视图控制器一个清晰的颜色背景。如果有任何改变,我的视图控制器就在故事板中。

【问题讨论】:

  • 这对我有用。我希望它也对你有用Answer

标签: iphone objective-c uiviewcontroller transparency


【解决方案1】:

当您以模态方式呈现视图控制器时,它会进入堆栈,从而将视图控制器隐藏在其下方。所以你所能做的就是呈现一个带有动画的透明视图,类似于模态呈现一个视图控制器。

【讨论】:

  • 所以我无法以模态方式实现这一目标?那你怎么建议?只是将视图添加为子视图?
  • 是的...如果您关心的是视图控制器,您仍然可以拥有视图控制器,并将其视图添加为带有一些动画的子视图。
【解决方案2】:

@Josh Kahane 在-ViewDidLoad 处设置将使用此代码呈现透明视图控制器的视图控制器 并确保将UIViewController View 的 alpha 通道设置为低于 1。

代码:

self.modalPresentationStyle = UIModalPresentationCurrentContext;

【讨论】:

  • 这是我的想法,但我试过了,我的视图只有黑色背景,没有透明度。
  • 伙计,我正在将此代码用于我的增强现实...再次,写你的邮件,我会给你发一个演示。
  • 好吧,经过进一步调查,如果我这样做self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;,那么它会起作用并且我的视图是透明的。但是它阻止了它的动画,有什么想法吗?
  • 它只会动画化 Dismiss 部分...你没有提到你使用导航控制器
  • 奇怪的是,如果我在模态呈现的控制器的 viewDidLoad 中执行 self.modalPresentationStyle = UIModalPresentationFormSheet,它就起作用了!
【解决方案3】:

这是可能的,尽管有很多步骤很容易忘记。在努力让这个工作 4 小时后,我想出了以下解决方案。

1 - 像其他任何东西一样创建视图控制器。

头文件

#import "DDBaseViewController.h"

@interface DDHomeSearchLoadingViewController : UIViewController

@end

实现文件

#import "DDHomeSearchLoadingViewController.h"

@interface DDHomeSearchLoadingViewController ()
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityMonitor;
@property (weak, nonatomic) IBOutlet UIView *modalView;

@end

@implementation DDHomeSearchLoadingViewController

#pragma mark - UIViewController lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];


    [self setupUI];
}

-(void) setupUI
{
    [self makeRoundedCorner:self.modalView AndCornerRadius:6.0f];
    [self.activityMonitor startAnimating];

}

-(void) makeRoundedCorner:(UIView*) view AndCornerRadius:(float) cornerRadius
{
    [view.layer setCornerRadius:cornerRadius];
    [view.layer setMasksToBounds:YES];
}

@end

2 - 将您的容器视图背景颜色设置为 ClearColor

3 - 添加一个 UIView,它将像叠加层一样呈现

4 - 添加一个 UIView,它将像一个对话框一样呈现在覆盖 UIView 上

当您添加/移动它时,请确保它位于覆盖视图之外。出于某种原因,当您使用鼠标移动它时,它会自动添加到覆盖 UIView。 (说实话真烦人)

5 - 为您创建的视图设置 Storyboard ID

6 - 最后在你不想调用它的地方添加这段代码(假设它也是一个 UiViewController)

DDHomeSearchLoadingViewController* ddHomeSearchLoadingViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"DDHomeSearchLoadingViewController"];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:ddHomeSearchLoadingViewController animated:YES completion:nil];

希望对大家有帮助

干杯

【讨论】:

  • one+ 我截屏并应用模糊效果,我猜它看起来更好:D
【解决方案4】:

我一直在寻找解决方案。现在感谢 iOS 8。他们引入了几个新的 modalPresentationStyle。其中之一是 UIModalPresentationOverCurrentContext。用同样的方法解决了这个问题。

viewcontroller.modalPresentationStyle = UIModalPresentationOverCurrentContext;

希望这会有所帮助。

【讨论】:

    【解决方案5】:

    为了完整性和更新,我还添加了 Swift 的解决方案:

    任一

    viewController.modalPresentationStyle = .CurrentContext 
    

    being - 内容仅显示在呈现视图控制器的内容上的呈现样式。

    viewController.modalPresentationStyle = .OverCurrentContext
    

    being - 内容仅显示在父视图控制器的内容上的呈现样式。当演示结束时,演示内容下方的视图不会从视图层次结构中删除。因此,如果呈现的视图控制器没有用不透明的内容填充屏幕,则底层内容会显示出来。

    取决于演示文稿的要求和情况。

    【讨论】:

      【解决方案6】:
      UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
      ChooseController *sec = [story instantiateViewControllerWithIdentifier:@"Controller"];
      sec.modalPresentationStyle = UIModalPresentationOverCurrentContext;
      sec.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
      [self presentViewController:sec animated:YES completion:^{}];
      

      注意:当前控制器的 superview alpha 值必须低于 1 就像 0.5 alpha 一样。

      【讨论】:

        【解决方案7】:

        斯威夫特 3 -

        试试vc.modalPresentationStyle = .overFullScreen

        let vc = self.storyboard!.instantiateViewControllerWithIdentifier("ExampleViewController") as! ExampleViewController
        vc.view.backgroundColor = UIColor.clearColor()
        vc.modalPresentationStyle = .overFullScreen
        self.presentViewController(vc, animated: true, completion: nil)
        

        【讨论】:

          【解决方案8】:

          您只需执行以下选项并降低父母视图的不透明度即可在情节提要中进行更改。使用 Storyboard:无需编写任何代码即可实现此目的

          【讨论】:

            【解决方案9】:

            Swift 5 的答案。

            TransparentViewController

            self.view.backgroundColor = .clear
            

            PresentingViewController

            let viewController = TransparentViewController()
            viewController.modalPresentationStyle = .overFullScreen
            navigationController.present(viewController, animated: false)
            

            【讨论】:

              猜你喜欢
              • 2019-11-29
              • 2015-09-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-27
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多