【问题标题】:IOS 7 : Adding modal ViewController with transparency : Custom SizeIOS 7:添加具有透明度的模态 ViewController:自定义大小
【发布时间】:2014-05-05 11:38:48
【问题描述】:

我想要做的是呈现一个来自底部并具有自定义大小的 viewController。无论我做什么,要么看起来很糟糕(例如它的动画,闪烁然后变透明),要么全屏显示,要么使整个屏幕变黑。我已经阅读了一些自定义委托处理动画的解决方案,但必须有一个简单的方法。还有很多解决方案适用于 iOS 6

    HackViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"HackViewController"];
   vc.delegate = self;
   vc.modalPresentationStyle= UIModalPresentationCustom;
   vc.view.frame = CGRectMake(0, 0, 800, 400);
   vc.credits = CREDIT_PER_LEVEL * building.buildingLevels;
   vc.view.backgroundColor = [UIColor clearColor];

   [self presentViewController:vc animated:YES completion:^{
             vc.view.backgroundColor = [UIColor clearColor];
   }];

【问题讨论】:

  • 我也在尝试相同的方法,但我得到的是呈现视图控制器隐藏了导航控制器的其他视图控制器。所以当你展示视图控制器并且它覆盖了整个屏幕时,它下面的所有其他视图控制器都会被隐藏并且它会失去透明度。

标签: ios uiviewcontroller


【解决方案1】:

如果您想将 viewController(例如 VC2)作为模式添加到第一个 viewController(例如 VC1)之上,那么在 VC1 中,当您呈现 VC2 时,

[self presentViewController:VC2 animated:YES completion:nil];

VC2 viewDidLoad

[self.view setBackgroundColor:[UIColor colorWithRed:211.0/255.0 green:211.0/255.0 blue:211.0/255.0 alpha:0.8]];

并且,在AppDelegateapplication didFinishLaunchingWithOptions:

[[self.window rootViewController] setModalPresentationStyle:UIModalPresentationCurrentContext];

您可以在VC2

中创建imageViewlabel等其他视图

【讨论】:

  • 这给了我有趣的结果,我以模态方式呈现游戏,因此它实际上隐藏了游戏视图并向我显示菜单,公平地说,这是我的问题而不是你的代码
  • 所以VC1(菜单)呈现VC2(游戏)。然后VC2呈现VC3(游戏选项)。用你的方法,VC3的背景是vc1
  • 是的,,,但是如果你不想显示VC1背景,将alpha属性设置为VC3的背景颜色[self.view setBackgroundColor:[UIColor colorWithRed:211.0/255.0 green:211.0/255.0 blue:211.0/255.0 alpha:1.0]];
  • 我想通过VC3看VC2
  • 你想要透明的VC,让它的alpha低
【解决方案2】:

如果您只想支持 iOS7 及更高版本,您可以使用自定义模态演示样式 (UIModalPresentationCustom) 来实现这一点,并实现 transitioningDelegate 以返回一个过渡控制器。在过渡控制器中,当呈现发生时将调用您,您可以提供呈现的视图控制器的目标框架。这对使用系统表示模型有很大的好处,并且系统知道控制器已经被展示了。

如果你需要支持iOS6,你需要将呈现的视图控制器添加为子视图,视图控制器作为呈现视图控制器的子视图控制器,并自己管理视图层次结构。由于手动视图层次控制和子/父视图控制器,这不是最佳的。

【讨论】:

    【解决方案3】:

    你不必presentViewController:,你可以用addSubview:做到这一点 继续做你正在做的事情,但将vc 的视图添加到呈现的视图控制器的视图中,而不是使用presentViewController: 呈现vc

    如果你在动画块中这样做,它会很好看。

    【讨论】:

    • 我知道你可以那样做,但是你需要做所有的 addChildViewController didMoveToParentViewController:nil 等等。有没有办法用 presentViewController 做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多